【问题标题】:Javascript Password complianceJavascript 密码合规性
【发布时间】:2016-09-21 06:14:57
【问题描述】:

我需要密码来满足这些要求

  1. 密码必须至少包含 8 个单词字符
  2. 必须至少有 1 个数字,例如3
  3. 必须至少有 2 个大写字符,但不能连续排列

这个好像不行

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

No.3 是最难的。

【问题讨论】:

  • 为什么这个问题被否决了这么多?这不是一个有效的问题吗?我觉得这个问题很有挑战性。
  • SOmething here1 应该失败吗?我认为是的,但请澄清。试试/^(?=\D*\d)(?=(?:(?:^|[^A-Z]+)[A-Z]){2}).{8,}$/.test(myPass.value)。或者,如果您打算只匹配字母、数字、下划线、点和连字符,请尝试/^(?=\D*\d)(?=(?:(?:^|[^A-Z]+)[A-Z]){2})[\w.-]{8,}$/.test(myPass.value)

标签: javascript regex passwords


【解决方案1】:

您正在混合消费模式和非消费模式,将限制量词添加到匹配序列的消费模式,而您只需检查字符串是否匹配某些限制模式与否。要添加这些限制,您需要 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 个或更多字符,除了在换行序列中使用的字符

  • [\w.-]{8,} - 8 个或更多 ASCII 字母和数字、下划线、点或连字符
  • $ - 字符串结束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    相关资源
    最近更新 更多