【问题标题】:Regular Expression For Password Field密码字段的正则表达式
【发布时间】:2014-08-13 09:10:55
【问题描述】:

我需要一个密码字段的正则表达式:

  • 必须有 1 个号码

  • 必须有 1 个字母(大写)

  • 必须有 1 个字母(小写)

  • 长度必须至少为 8 个字符

  • 只能包含字母和数字字符

到目前为止我有:

((?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,})

这符合我上面的大部分条件。但是我怎样才能将其限制为只允许字母数字字符。

【问题讨论】:

  • 最后一个要求对于密码来说是非常规的。
  • 此外,最后一个要求迫使用户使用较弱的密码,应该不惜一切代价避免。
  • @Antti 你的链接有点相反,不是吗?
  • 这些规则中的每一个都不允许使用 'correct horse battery staple' 作为密码。

标签: regex


【解决方案1】:

使用[a-zA-Z0-9] 而不是. 并锚定您的正则表达式:

^((?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,})$

【讨论】:

    【解决方案2】:

    你可以在最后改变基础:

    ((?=.*\d)(?=.*[a-z])(?=.*[A-Z])[^\W_]{8,})
    

    此解决方案希望您的正则表达式引擎锚定。如果没有,请使用^$ 锚定它们。

    [^\W_] 是否定字符类。它断言该字符不是单词字符或_

    由于单词字符涵盖字母数字字符和下划线,这种双重否定字符类速记 [^\W_] 非常适合这些场景。

    如果您的正则表达式引擎支持 ascii 类,您也可以使用 [[:alnum:]]

    这是regex demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多