2

我试图创建一个正则表达式掩码以限制输入字段。

到目前为止,我想出了这个

^[^0][0-9]*(,?[0-9]*)*$

以下应该是可接受的值:

123456,12,1,654,19512
2321
312,1

基本上任何给定的整数后跟一个逗号和另一个整数(位数无关紧要),但任何整数组都不应该以零开头。

但是我错过了一些额外的表达式,因为以下值被接受并且不应该:

123,012
123,,0123
123,0,0
123,0,0,,,,0,31

我将非常感谢您的帮助,因为我是 Regex 代码的新手。

编辑:我知道该值可能有一个尾随逗号,但没关系,在提交值后我已经有一个输入验证

另外,我怎样才能让退格键在输入中工作?

4

4 回答 4

3

您不应将逗号标记为可选

^[1-9][0-9]*(,[1-9][0-9]*)*$
于 2013-10-15T18:16:36.227 回答
1

这会做。

^[1-9]\d*(,\s*[1-9]\d*)*$

任何以 1-9 开头,后跟 0 位或更多位数字,后跟带有前置逗号 0 次或更多次的相同结构

于 2013-10-15T18:20:16.317 回答
0

如果您在击键之间进行验证,此正则表达式可能会起作用。
接受后需要不同的正则表达式。

 //  ^(?![0,]|[\d,]*,0$|[\d,]*,,$)[\d,]+$

 ^           # BOL
 (?!                    # Not any of these
      [0,]              # No 0 or , at beginning of string
   |  [\d,]* ,0 $       # No  ,0 at end of string
   |  [\d,]* ,, $       # No  ,, at end of string
 )
 [\d,]+      # validate these to restrict input chars
 $           # EOL
于 2013-10-15T20:07:14.177 回答
0

我想添加评论,但最终写得太多,所以我将其转移到答案中。

Guillaume Poussel 和 Luis Gonzalez 编写的正则表达式都是您想要的(尽管它们在语法上略有不同,更重要的是,Luis 的正则表达式允许逗号和整数之间有空格) - 用于结束验证。正如 Guillame Poussel 在他的评论中指出的那样,您需要分两步进行验证 - 一个作为输入掩码,一个作为完成验证。他们为您提供的正则表达式用于所有已完成的部分 - 您可能希望将此正则表达式放在输入控件的模糊事件上。对于控制输入(取消用户的击键)的按键或类似事件,您需要一个更宽松的正则表达式,允许尾随逗号、前导零甚至以多个逗号结尾的字符串,即
^[1-9][0-9]*(,[0-9]*)*$.

如果您对客户端能够插入无效的输入字符串并被告知它没有任何问题,但在转到另一个字段或其他内容后被通知它无效,您也可以拥有一个您已经获得的正则表达式作为答案,但不是将其作为掩码正则表达式(如果输入无效则取消按键),您可以让该正则表达式将字段的背景更改为红色或类似的东西以立即通知该人输入,因为它目前是无效的。

您也可以做一个混合解决方案,其中您有一个松散的掩码输入,就像我建议的那样和同一事件的最终正则表达式,但不是取消在所有完成的正则表达式失败时的按键,而是将背景更改为红色或其他并且仅当松散的正则表达式失败时才取消。这样,您的用户就不会编写大多数无效的输入字符串,并且对于那些无效的输入字符串,(s)他会立即被通知它无效。

于 2013-10-15T20:42:53.000 回答