我有一个场地"地板"我希望它只接受数字,逗号和空格。
我现在正在使用validates_format_of :floors, :with => /[0-9\,\s]+/
,但它运行不好,因为它接受类似" 1,2,abc"的字符串。
请帮我找错。
答案 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.567
或1 300 567.567
等数字与
/\A\d{1,3}(?:[,\s]\d{3})*(?:\.\d+)?\z/
请参阅another demo