繁体   English   中英

正则表达式掩码输入

[英]Regular expression masked input

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

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

^[^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代码的新手。

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

另外,如何允许退格键在输入中起作用?

您不应将逗号标记为可选

^[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在他的评论中指出的那样,您需要分两步进行验证-第一步是输入掩码,一步是完成校验。 他们提供给您的正则表达式用于完成的所有部分-您可能希望将此正则表达式放在输入控件的blur事件上。 对于控制输入(取消用户的击键)的按键或类似事件,您需要一个更为宽松的正则表达式,该表达式允许尾随逗号,前导零甚至以多个逗号结尾的字符串,即
^[1-9][0-9]*(,[0-9]*)*$

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM