2016-09-21 54 views
-3

我需要密码才能满足这些要求的Javascript密码遵守

  1. 密码必须包含至少8个单词字符
  2. 必须有至少1个数字位数例如3
  3. 必须至少有2个大写字符而不是在一个连续的序列

这似乎并不与此

var pos = myPass.value.search(/^([\w.-]{8,})(?=.*\d)((.*?[A-Z]){2,})$/); 

3号工作是最难​​的。

+1

为什么这个问题被低估了那么多?这不是一个有效的问题吗?我觉得这个问题颇具挑战性。 –

+0

'SOmething here1'应该失败吗?我想是的,但请澄清。试试'/^(?=\D*\d)(?=(?:(?:[||[AZI]+)[AZ]){2}).{8,}$/.test(myPass。值)'。或者,如果您只打算匹配字母,数字,下划线,点和连字符,请尝试使用/ ^(?= \ D * \ d)(?=(?:(?:^ | [^ AZ] +)[AZ ]){2})[\瓦特.-] {8,} $ /。试验(myPass.value)' –

回答

0

你混合消费和非消费模式将限制量词来匹配序列的消费模式,而你只是需要检查如果字符串匹配一些限制性的图案或没有。要添加这些限制,您需要预览(?=.*\d)你正则表达式的正确部分,其他都不是。

此外,​​是一个更好的方法来检查字符串是否匹配。

使用

/^(?=\D*\d)(?=(?:(?:^|[^A-Z]+)[A-Z]){2}).{8,}$/.test(my‌​Pass.value) 

regex demo

或者,只允许字母,数字,下划线,点和连字符的密码:

/^(?=\D*\d)(?=(?:(?:^|[^A-Z]+)[A-Z]){2})[\w.-]{8,}$/.test(my‌​Pass.value) 
             ^^^^^^ 

详细

  • ^ - 串
  • (?=\D*\d)的开始 - 后弦开始0+非数字(\D*),必须有一个数字(\d)(注意,这个先行执行后,正则表达式指数仍处于的字符串的开头)
  • (?=(?:(?:^|[^A-Z]+)[A-Z]){2}) - 必须有2个序列((?:...){2}):
    • (?:^|[^A-Z]+) - 串或大于大写字母
    • [A-Z]其它的一个或多个字符的开始 - 向上percase letter。
  • .{8,} - 8个或更多ASCII字母和数字,下划线,点或连字符
  • $ - - 比在断行序列
    OR
  • [\w.-]{8,}使用其它任何8个或更多字符的端串。