正则表达式为四位数字,每个数字最多为100

时间:2014-07-17 00:36:39

标签: ruby regex

我正在尝试编写一个正则表达式来验证字符串,并且只接受一系列四个以逗号分隔的数字,每个数字最多为100。这样的东西是有效的:

20,30,40,50

这些无效:

120,0,20,0
20,30,40,ss
invalid_string

有什么想法吗?

它们用于CMYK颜色。我们只需将它们存储在这里,而不是使用它们。

3 个答案:

答案 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}$

试试这个