jQuery RegEx。如果string包含除以外的任何字符

时间:2017-07-11 09:53:31

标签: javascript regex

我有这个RegEx用于验证用户输入的内容

长度必须为8 - 16个字符,并且可以包含某些特殊字符。

/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[:;#~]).{8,16}$"

如果用户输入的内容与上述内容不符,我不会尝试显示警告。因此允许使用a-z,A-Z,0-9和:;#~,但其他任何内容都会显示警告。

所以Abcd1234#可以,但如果他们输入Abcd1234!$,则会将警告显示为!& $不在比赛中。

我尝试将^添加到字符匹配的开头尝试否定它们,但这不起作用。

最好的方法是什么?

1 个答案:

答案 0 :(得分:2)

似乎你只需要允许前瞻中提到的字符,用它们创建一个字符类并用它替换最后的.

/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[:;#~])[\da-zA-Z:;#~]{8,16}$/
                                            ^^^^^^^^^^^^^^

请参阅regex demo

[\da-zA-Z:;#~]{8,16}模式将匹配8到16个字符,这些字符可以是数字,ASCII字母或:;#~符号。

<强>详情:

  • ^ - 字符串开头
  • (?=.*\d) - 除了换行符之外的任何0 +字符之后必须有一个数字((?=\D*\d)会更有效,因为它基于contrast principle
  • (?=.*[a-z]) - - 除了换行符之外的任何0+字符之后必须有一个ASCII小写字母((?=[^a-z]*[a-z])会更有效率)
  • (?=.*[A-Z]) - 除了换行符之外的任何0+字符之后必须有一个ASCII大写字母((?=[^A-Z]*[A-Z])会更有效率)
  • (?=.*[:;#~]) - 除了换行符之外的任何0 +字符之后必须有:;#~(您也可以使用(?=[^:;#~]*[:;#~])
  • [\da-zA-Z:;#~]{8,16} - 在字符类
  • 中定义的8到16个字符
  • $ - 字符串结束。