英语和阿拉伯数字
我用下面的代码来验证numericality Rails中验证Numericality条件:英语和阿拉伯数字
validates :number, :numericality => {:greater_than_or_equal_to => 500}
而且它工作得很好,但后来我加了正则表达式来允许阿拉伯数字是这样的:
validates :number, :format =>{:with => /[0-9\u0660-\u0669]*/}
这里它接受阿拉伯数字,但条件greater_than_or_equal_to => 500
只适用于英文数字,我也需要它来支持阿拉伯数字。
好的,这个数字可以定义为[0-9]
并与阿拉伯数字[0-9\u0660-\u0669]
组合。我们希望首先匹配500
高达999
。我们需要结合[5-9]
与[\u0665-\u0669]
- >[5-9\u0665-\u0669]
,它们将以5
到9
的ASCII和阿拉伯语表示匹配。在5-9
之后,可以有2个以上的任意数字,所以我们需要追加[0-9\u0660-\u0669]{2}
。
接下来,我们需要允许超过999
的数字,即1000
以及更多。所以,我们需要添加一个替代分支[0-9\u0660-\u0669]{4,}
。
整个结果是
/\A([5-9\u0665-\u0669][0-9\u0660-\u0669]{2}|[0-9\u0660-\u0669]{4,})\z/
凡\A
字符串的开头相匹配,\z
所述字符串的末尾匹配和(Branch_1|Branch_2)
是一个分组构建体,其可以通过之后加入?:
变成非捕获一个初始(
:
/\A(?:[5-9\u0665-\u0669][0-9\u0660-\u0669]{2}|[0-9\u0660-\u0669]{4,})\z/
完美的解决方案谢谢.. –
对于希望避免在这种情况下使用regex
来允许阿拉伯数字与Integer
数据库字段(而不是string
)一起工作的ROR用户,我发现here是在验证之前将Unicode数字转换为Integer的一个很好的示例,所以它仍然是可能使用这样的条件:
validates :number, :numericality => {:greater_than_or_equal_to => 500}
'/ [0-9 \ u0660- \ u0669] * /'匹配任何字符串。使用'+'而不是'*'来匹配至少1次。 –
我试过验证:number,:format => {:with =>/[0-9 \ u0660- \ u0669] + /},:numericality => {:greater_than_or_equal_to => 500} 但是不起作用阿拉伯数字现在是允许的,但条件'greater_than_or_equal_to => 500'不起作用) –
是的,因为这并不明显。那么试试'/ \ A([5-9 \ u0665- \ u0669] [0-9 \ u0660- \ u0669] {2} | [0-9 \ u0660- \ u0669] {4,})\ z/' –