Ruby 四位数字系列的正则表达式,每一位最大为100
我正在尝试编写一个正则表达式来验证字符串,并且只接受由四个逗号分隔的数字组成的序列,每个数字最多为Ruby 四位数字系列的正则表达式,每一位最大为100,ruby,regex,Ruby,Regex,我正在尝试编写一个正则表达式来验证字符串,并且只接受由四个逗号分隔的数字组成的序列,每个数字最多为100。类似这样的东西是有效的: 20,30,40,50 这些是无效的: 120,0,20,0 20,30,40,ss invalid_string 有什么想法吗 它们用于CMYK颜色。我们只需要将它们存储在这里,而不是使用它们。数字范围和子例程 在Ruby 2+中,对于紧凑型正则表达式,请使用以下命令: ^([0-9]|[1-9][0-9]|100)(?:,\g<1>){3}$
100
。类似这样的东西是有效的:
20,30,40,50
这些是无效的:
120,0,20,0
20,30,40,ss
invalid_string
有什么想法吗
它们用于CMYK颜色。我们只需要将它们存储在这里,而不是使用它们。数字范围和子例程 在Ruby 2+中,对于紧凑型正则表达式,请使用以下命令:
^([0-9]|[1-9][0-9]|100)(?:,\g<1>){3}$
^([0-9]|[1-9][0-9]| 100)(?:,\g){3}$
解释
锚定声明我们位于字符串的开头^
周围的括号匹配0到100之间的数字,并定义子例程| 1([0-9]|[1-9][0-9]| 100)
匹配一个逗号和子例程1定义的表达式(?:,\g)
量词重复这三次{3}
锚点断言我们在字符串的末尾$
- 我可以省去使用正则表达式解决数字相关问题的麻烦。此外,验证消息看起来也很糟糕,因此最好自己制作:
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:p这样的regex绝地大师
^(?:\d{1,2},){3}\d{1,2}$
试试这个哇。这个解释给我留下了深刻的印象。哇,这么简单,但我不会猜到+1子例程是一项很棒的功能,许多引擎都不支持它。但Ruby 2+有它的功能。:)你也可以给它们命名。像
(?[a-z]+){0}\g
@nicooga谢谢你的支持。是的,没错,你可以说出他们的名字。:)将另一个标记为已接受,因为它在正则表达式中,但无论如何还是要感谢。建议至少在代码中添加一些注释。