正则表达式屏蔽输入

时间:2013-10-15 18:13:44

标签: javascript jquery regex

我试图创建一个Regex掩码以限制输入字段。

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

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

以下应为可接受的值:

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

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

但我遗漏了一些额外的表达,因为接受了以下值并且它不应该:

123012
123,0123
123,0,0
123,0,0 ,,,, 0,31

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

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

另外,我如何允许退格在输入中工作?

4 个答案:

答案 0 :(得分:3)

您不应将逗号标记为可选

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

答案 1 :(得分:1)

这样做。

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

任何以1-9开头,后跟0或更多位数的内容,后跟相同的构造,前缀逗号为0或更多次

答案 2 :(得分: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

答案 3 :(得分:0)

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

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

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

你也可以做一个混合解决方案,你有一个像我建议的那样松散的面具输入和同一事件的最终正则表达式,但不是在全部正式表达式失败时取消按键,而是将背景更改为红色或其他什么,只有松散的正则表达式失败才取消。这样,您的用户就无法编写大多数无效的输入字符串,对于那些无效的输入字符串,他会立即得到通知,告知其无效。