Javascript密码合规性

时间:2016-09-21 06:14:57

标签: javascript regex passwords

我需要密码才能满足这些要求

  1. 密码必须至少包含8个字符
  2. 必须至少包含1位数字,例如3
  3. 必须至少有2个大写字符,但不能连续一个序列
  4. 它似乎不适用于此

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

    No.3是最难的。

1 个答案:

答案 0 :(得分:0)

您正在混合消费和非消费模式,将限制量词添加到与序列匹配的消费模式,而您需要检查,如果字符串符合某些限制条件模式与否。要添加这些限制,您需要 lookaheads (?=.*\d) 是你的正则表达式的正确部分,其他都不是。

此外,RegExp#test()是检查字符串是否匹配的更好方法。

使用

/^(?=\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] - 大写字母。
  • .{8,} - 除了换行符序列中使用的字符之外的任何8个或更多字符
    OR
  • [\w.-]{8,} - 8个或更多ASCII字母和数字,下划线,点或连字符
  • $ - 字符串结束。