正则表达式屏蔽输入

Regular expression masked input

本文关键字:输入 屏蔽 正则表达式      更新时间:2023-09-26

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

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

^[^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

我将非常感谢您的帮助,因为我是正则表达式代码的新手。

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

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

不应将逗号标记为可选

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

就可以了。

^[1-9]'d*(,'s*[1-9]'d*)*$
以 1-9 开头,后跟 0 或更多

数字,后跟带有前缀逗号的相同结构的任意值 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

我想添加评论,但最终写得太多了,所以我把它转移到一个答案上。

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

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

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