我想写一个名称字段的验证,该字段不应该接受该字段中的三个连续数字。 例如:
这是我已有的代码:
<xf:constraint id="name-constraint" value="string(.)="" or matches(.,"^[-a-zA-Z0-9/.,()*+_&'@#% ]*$")"/>
请在此建议修改。
答案 0 :(得分:3)
^(?!.*\d{3})
应该有效。如果字符串包含3个或更多连续数字,则无法匹配。
答案 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个或更多数字。