【问题标题】:Need help: RegEx for a password containing numbers and special chars需要帮助:RegEx 用于包含数字和特殊字符的密码
【发布时间】:2010-11-19 12:27:48
【问题描述】:

我需要有关 RegEx 密码的帮助。密码必须至少包含一个特殊字符(如“§$&/!)和一个数字。

例如像“EdfA433&”这样的密码必须有效,而“aASEas§ö”则不是,因为它不包含数字。

到目前为止,我有以下 RegEx:

^(?=.*[0-9])(?=.*[a-zA-Z]).{3,}$

但这显然只是检查一个数字。有人可以帮忙吗?

【问题讨论】:

    标签: javascript regex passwords


    【解决方案1】:

    您最好只使用多个更简单的正则表达式:任何检查此类内容的代码都不会对性能敏感,并且给定更复杂的正则表达式的额外维护复杂性可能是不合理的。

    那么,我要做什么:

    var valid = foo.match(/[0-9]/) && foo.match(/["§$&/!]/);
    

    我想知道您是否真的想定义这样的特殊字符:é 算作特殊字符吗? ~ 算不算特殊字符?

    【讨论】:

    • 上面的字符只是示例 - 除了 [a-zA-Z0-9] 以外的所有字符都算作特殊字符。也许把它分成两个单独的表达式真的是个好主意。
    • 这可能是最简单的解决方案。我现在使用:val.match(/[0-9]/) && val.match(/\W/);
    【解决方案2】:
     ^(?=.*\d)(?=.*\W).{3,}$
    

    检查至少一位数字 (\d) 和一位非字母数字字符 (\W)。 \W\w 的倒数,它匹配数字、字母和下划线。

    如果要在“特殊字符”列表中包含下划线,请使用

     ^(?=.*\d)(?=.*[\W_]).{3,}$
    

    【讨论】:

    • 谢谢!虽然看起来下划线在字符串的开头不起作用。
    • 我正在给 gsnedders 接受的答案,因为他的速度有点快。两个答案都很好地解决了我的问题。谢谢!
    【解决方案3】:

    我会将检查密码是否“硬”的功能分成几个部分,在每个部分中我会检查一个条件。您可以在 Daily WTF 上看到一些复杂的正则表达式,并重置密码:http://thedailywtf.com/Articles/The-Password-Reset-Facade.aspx

    【讨论】:

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