我正在尝试编写一个正则表达式来验证字符串,并且只接受一系列四个以逗号分隔的数字,每个数字最多为100
。这样的东西是有效的:
20,30,40,50
这些无效:
120,0,20,0
20,30,40,ss
invalid_string
有什么想法吗?
它们用于CMYK颜色。我们只需将它们存储在这里,而不是使用它们。
答案 0 :(得分:8)
数字范围和子程序
在Ruby 2+中,对于紧凑的正则表达式,请使用:
^([0-9]|[1-9][0-9]|100)(?:,\g<1>){3}$
<强>解释强>
^
锚点断言我们位于字符串的开头([0-9]|[1-9][0-9]|100)
周围的括号匹配0到100之间的数字并定义子程序#1 (?:,\g<1>)
匹配一个逗号和子例程#1 {3}
量词重复三次$
锚点断言我们位于字符串的末尾答案 1 :(得分:1)
我省去了使用正则表达式解决一些相关问题的麻烦。此外,验证消息看起来很笨拙,因此最好自己创建:
validate :that_string_has_only_4_numbers_upto_100
def that_string_has_only_4_numbers_upto_100
errors.add(:str, 'is not valid.') unless str.split(/,/).all? { |n| 1..100 === n.to_i }
end
除非你是像@ zx81这样的re rex xedi guru:p。
答案 2 :(得分:0)
^(?:\d{1,2},){3}\d{1,2}$
试试这个