使用正则表达式识别格式化的数字

时间:2017-02-05 20:29:01

标签: ruby regex

1      #valid
1,5    #valid
1,5,   #invalid
,1,5   #invalid
1,,5   #invalid
       #'nothing' is also invalid

用逗号分隔的数字可以是任意的。

我试图使用正则表达式来执行此操作。这是我到目前为止所尝试过的,但没有一个有效:

"1,2,," =~ /^[[\d]+[\,]?]+$/      #returned 0
"1,2,," =~ /^[\d\,]+$/            #returned 0
"1,2,," =~ /^[[\d]+[\,]{,1}]+$/   #returned 0
"1,2,," =~ /^[[\d]+\,]+$/         #returned 0

显然,我需要表达式来识别1,2,,无效,但它们都返回0 :(

1 个答案:

答案 0 :(得分:3)

你的模式并没有真正起作用,因为:

  • ^[[\d]+[\,]?]+$ - 匹配包含一个或多个数字+,?字符的行(并匹配上面的所有字符串,但最后一个空字符串)
  • ^[\d\,]+$ - 匹配由1位数字或,符号
  • 组成的行
  • ^[[\d]+[\,]{,1}]+$ - 匹配包含一个或多个数字的行,+,{}字符
  • ^[[\d]+\,]+$ - 匹配包含一个或多个数字+,字符的行。

基本上,问题是您尝试依赖字符类,而您需要分组构造(...)

逗号分隔的整数可以用

验证
/\A\d+(?:,\d+)*\z/

请参阅Rubular demo

<强>详情:

  • \A - 字符串开头
  • \d+ - 1+位数
  • (?:,\d+)* - 零次或多次出现:
    • , - 逗号
    • \d+ - 1+位数
  • \z - 字符串结束。