密码的正则表达式匹配

时间:2013-08-08 17:04:27

标签: asp.net regex vb.net

我正在使用VB在ASP.Net中构建一个表单,我有一个文本框,我想根据以下规则进行验证:

  • 长度必须为6 - 20个字符
  • 可以包含字母,可以是所有字母
  • 可以包含以下特殊字符:!@#$%^&*+-=(){}:;,'./?
  • 不能包含任何空格。
  • 不能是所有数字,也不是要求数字
  • 案件无关紧要

这些要求不是我设定的......这就是我必须要做的事情。

所以,以下内容将匹配:

TestUserPass
Te$tU$e^p@%}
testuserpass
test{user}n@ame

以下内容不匹配:

8392039
dhj#5|3j

希望能够了解我正在寻找的东西......

这是我到目前为止所拥有的:\b[a-zA-Z0-9!@#\$%\^&\*\+=\(\){}:;,'\./\?-]{6,20}\b

我认为除了使条目全部为数字的实例无效之外,它的所有功能都有效。这是我一直在努力的所有数字部分,尽管也许有人会发现我已经拥有的一个缺陷。非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

您应该使用不同的锚点,并且可以使用negative lookahead assertion来确保存在除数字之外的其他字符:

^(?![0-9]*$)[a-zA-Z0-9!@#\$%^&*+=(){}:;,'./?-]{6,20}$

此外,您不需要在字符类中转义(大多数)正则表达式元字符,因为它们在那里没有特殊含义。

答案 1 :(得分:1)

使用此正则表达式

^(?!\d+$)[a-zA-Z\d!@#$%^&*+=(){}:;,'./?-]{6,20}$
 --------                                
     |
     |->dont match further if all are digits
字符类中的

-代表一个范围,应该是转义的,或者应该在开头或结尾......