rails中的validates_format_of(仅限数字,逗号和空格)

时间:2016-01-11 14:40:14

标签: ruby-on-rails regex validation

我有一个场地"地板"我希望它只接受数字,逗号和空格。

我现在正在使用validates_format_of :floors, :with => /[0-9\,\s]+/,但它运行不好,因为它接受类似" 1,2,abc"的字符串。

请帮我找错。

1 个答案:

答案 0 :(得分:2)

您的正则表达式与1, 2, 内的1, 2, abc匹配,这是部分匹配。要禁止部分匹配,请使用字符串开头和字符串结尾锚点。

在Ruby中,要匹配字符串的开头,您需要使用\A锚点。字符串结尾锚点为\z。因此,使用

/\A[0-9,\s]+\z/

请参阅regex demo

另请注意,,不是特殊的正则表达式元字符,不需要转义。

如果您需要以数字开头,可以使用

/\A\d[\d,\s]*\z/

在这里,\d将需要一个数字出现在开头,然后可以跟随数字,空格和逗号,零次或多次出现。限制泛型字符类的另一种方法是使用前瞻:\A(?=\d)[\d,\s]+\z

更进一步,您可以将1,300,567.5671 300 567.567等数字与

匹配
/\A\d{1,3}(?:[,\s]\d{3})*(?:\.\d+)?\z/

请参阅another demo