Reg Exp,不应允许字符串中的三个或更多连续数字

时间:2016-11-29 05:58:37

标签: javascript regex

我想写一个名称字段的验证,该字段不应该接受该字段中的三个连续数字。 例如:

  • a& c12s - success
  • 12b_1 - 成功
  • ab12 @ c23d - 成功
  • a * c12 - 成功
  • abc123G - 失败
  • abc123456K - 失败
  • 1234Ks - 失败
  • ab12sp1234k - 失败

这是我已有的代码:

<xf:constraint id="name-constraint" value="string(.)="" or matches(.,"^[-a-zA-Z0-9/.,()*+_&'@#% ]*$")"/>

请在此建议修改。

3 个答案:

答案 0 :(得分:3)

^(?!.*\d{3})应该有效。如果字符串包含3个或更多连续数字,则无法匹配。

demo here

答案 1 :(得分:2)

匹配无效输入

如果有三个或更多数字,您可以解决问题并找到匹配的正则​​表达式(如果有三个或更多),而不是尝试找到失败的正则​​表达式更多数字,正如其他答案所建议的那样。然后,如果匹配,则输入无效;如果没有,则有效。那个regexp当然只是

/\d{3}/

匹配有效输入

如果你真的想要一个只匹配有效字符串的正则表达式,那么你需要:

/^(\D|\d(\D|$)|\d\d(\D|$))*$/

这说:

  

从开头(^)到结尾($)的整个字符串是一个段的序列(*),每个段都是(|)一个数字(\D),或一个数字(\d)后跟非数字(或字符串结尾),或两位数后跟非数字(或字符串结尾)

这个解决方案的缺点是它的可扩展性不高 - 换句话说,将它更改为查找10位或更多位数的序列会非常麻烦。

负面展望

@ TheLostMind的答案给出了可能是最好的解决方案,如果你愿意学习负向前瞻:

/^(?!.*\d{3})/
  ^^^ NEGATIVE LOOKAHEAD

这说:

  

匹配字符串的开头(^如果,向前看看到((?!)一些随意的字符跟随三位数。

答案 2 :(得分:0)

您可以测试:

new RegExp("[0-9]{3,}")

或: /[0-9]{3,}/

如果你想要一个快捷方式: /\d{3,}/其中\ d表示0-9的数字 如果您的字符串匹配,则它连续包含3个或更多数字。