2015-01-14 83 views
8

我需要一个密码字段的正则表达式。正则表达式的密码:“至少1个字母,1个数字,1个特殊字符,不应该以特殊字符开头”

的要求是:

  1. 密码必须长度为8到20个字符

  2. 必须包含至少一个字母一个号码和一个特殊的字符从[email protected]#$%^&*()_+

  3. 不应该以特殊字符

我已经试过

^(?=.*[a-zA-Z])(?=.*\d)(?=.*[[email protected]#$%^&*()_+])[A-Za-z\[email protected]#$%^&*()_+]{8,20} 

它的工作原理,但你如何限制从开始的口令特殊字符开始?另外,如果你有一个比上面提到的更有效的正则表达式,请建议。

谢谢

+0

我不会做,与正则表达式(不认为它甚至有可能)。我会通过字符搜索字符串char,并有我的计数器。 – Ch33f

回答

10

它的简单,只是在开始时

^(?=.*[a-zA-Z])(?=.*\d)(?=.*[[email protected]#$%^&*()_+])[A-Za-z\d][A-Za-z\[email protected]#$%^&*()_+]{7,19}$ 
  • [A-Za-z\d]确保第一个字符是字母或数字增加一个字符类。

  • [A-Za-z\[email protected]#$%^&*()_+]{7,19}将匹配最小7个最大19个字符。这是必需的,因为他预测字符类将消耗单个字符,从而使得字符串中的字符总数为最小值8和最大值20.

  • $锚定字符串末尾的正则表达式。确保有没有按照我们的有效的密码

Regex Demo

var pattern = new RegExp(/^(?=.*[a-zA-Z])(?=.*\d)(?=.*[[email protected]#$%^&*()_+])[A-Za-z\d][A-Za-z\[email protected]#$%^&*()_+]{7,19}$/); 

console.log(pattern.test("[email protected]#[email protected]#")); 
=> false 

console.log(pattern.test("[email protected]#")); 
=> true 

console.log(pattern.test("12as#")); 
=> false 
+0

完美的作品。谢谢! – adiga

+0

@adiga欢迎:) – nu11p01n73R

+0

@adiga我看到了你的编辑。它可以在前面用'\ w'代替,但是由于'\ w' =>'[A-Za-z0-9_]在第一个字符类“[A-Za-z \ d] '。注意'_'是一个特殊字符,如果使用'_asdf234 $%',可能会给你带来麻烦。我认为这不能被视为有效。希望它对你好:) – nu11p01n73R

相关问题