【问题标题】:Regex for password of minimum 8 characters, including at least 3 of these: uppercase character, lowercase character, number and special character至少 8 个字符的密码的正则表达式,包括至少 3 个:大写字符、小写字符、数字和特殊字符
【发布时间】:2019-06-05 00:03:23
【问题描述】:

以下是我目前用于验证密码的正则表达式:至少一个大写字符、至少一个小写字符、至少一个数字和至少 8 个长度的字符。

func isValidPassword() -> Bool {
    let passwordRegEx = "^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).{8,}$"
    return NSPredicate(format:"SELF MATCHES %@", passwordRegEx).evaluate(with: self)
}

我现在想包含特殊字符并更新验证规则如下。

最少 8 个字符,至少应包括其中的 3 个:大写字符、小写字符、数字和特殊字符。

这个要求的正则表达式是什么?

【问题讨论】:

  • 试试这个^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9]).{8,}$
  • 我建议您为每个字符集创建四个正则表达式,并使用编程逻辑单独检查您的密码是否有效,如果任何三个正则表达式有效,则为真,否则为假。虽然我可以提供纯正则表达式解决方案,但正则表达式会有点太大,看起来有点复杂且无法维护。
  • 您可能会发现Reference - Password Validation 很有用。

标签: ios regex


【解决方案1】:

我认为你最好编写一个 for 循环来遍历单个字符并跟踪哪个 createria 已经通过,而不是创建一个越来越复杂的正则表达式。

  • 在短短几个月内,任何程序员都很难理解/维护正则表达式。 任何程序员都会在几个月内包括你
  • 如果要求不匹配,您可以向用户提供详细信息。您可以显示一条消息“密码中未找到大写字符”等。
  • 您可以(更)轻松地实现“禁止重复数字”等内容
  • 虽然性能无关紧要,但正则表达式会比循环慢得多。

【讨论】:

    猜你喜欢
    • 2015-01-18
    • 2021-09-08
    • 2023-01-19
    • 2012-05-30
    相关资源
    最近更新 更多