验证英语和阿拉伯数字的数值条件
Validate Numericality Conditions on English & Arabic Numbers
我正在使用以下代码来验证 Rails 中的数值:
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]
结合起来,这将在 ASCII 和阿拉伯符号中匹配 5
到 9
。在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}
我正在使用以下代码来验证 Rails 中的数值:
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]
结合起来,这将在 ASCII 和阿拉伯符号中匹配 5
到 9
。在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}