Ruby正则表达式确保字符串包含逗号字符

时间:2015-03-11 22:51:21

标签: ruby-on-rails ruby regex

我需要验证字符串是否至少有一个逗号,但不能超过4个逗号。

这是我尝试过的:

/,{1,4}/

/,\s{1,4}/

这些都不起作用。

注意:我一直在Rubular

上测试我的RegEx

非常感谢任何帮助。

注意:我在Active Record Validation的上下文中使用它:

validates :my_string, format: { with: /,\s{1,4}/}

如何将此作为Active Record Validation?

3 个答案:

答案 0 :(得分:2)

str ="a,b,a,,"
p str.count(",").between?(1, 4) # => true

答案 1 :(得分:1)

它必须是正则表达式吗?如果没有,请使用Ruby的count方法:

> "a,a,a,a,a".count(',')
=> 4

答案 2 :(得分:1)

我也建议使用count,但为了解决您的具体问题,您可以这样做:

r = /^(?:[^,]*,){1,4}[^,]*$/

!!"eenee"[r]
  #=> false 
!!"eenee, meenee"[r]
  #=> true 
!!"eenee, meenee, minee, mo"[r]
  #=> true 
!!"eenee, meenee, minee, mo, oh, no!"[r]
  #=> false 
  • (?:[^,]*,)是一个非捕获组,它匹配逗号以外的任何字符串,后跟逗号;
  • {1,4}确保非捕获组匹配1到4次;
  • ^确保在第一个非捕获组之前没有逗号;和
  • [^,]*$确保最后一次非捕获组后没有逗号。