【问题标题】:How to create regex for passwords contain at least 1 of the following: lowercase letters, uppercase letters, numbers [duplicate]如何为密码创建正则表达式至少包含以下一项:小写字母、大写字母、数字 [重复]
【发布时间】:2014-07-04 07:19:42
【问题描述】:

我正在尝试为我在 PHP 中的密码验证创建一个正则表达式。我想要的不是小写字母、大写字母、数字和符号中的至少两个,而是这三个类别中的至少一个类别,例如“Rose”可以工作,“Rose456”也可以,“rose456”将工作,“Rose456!”也可以。

非常感谢!

【问题讨论】:

  • relevant xkcd;你试过什么?
  • 提问前请先搜索一下。这个问题被问了很多很多。例如请参阅:Regular expression for a string that must contain minimum 14 characters, where at minimum 2 are numbers, and at minimum 6 are letters - 这里还有许多其他答案。
  • “至少其中一个”所以基本上任何密码只要不完全由符号组成?为什么要强制执行 any 密码策略?
  • @ridgerunner 是的。这三个类别中的 1 个类别没有任何意义。我在这里尝试做的至少是三个类别中的两个,所以我在这里有点困惑
  • @Sammitch 是的,你是对的,我没有想通..我刚开始学习 php,这是我的练习之一..我应该说至少 2 个大写字母类别、小写字母、数字和符号?

标签: php regex passwords


【解决方案1】:

单独验证单个密码要求比创建单个 uber-expression 来一次验证所有内容要简单得多。

if(
  // mandatory matches
  strlen($password) > $minlength   &&     // enforce length
  preg_match('/[a-z]/', $password) &&     // contains lowercase
  preg_match('/[A-Z]/', $password)        // contains uppercase
) {
    $passed_count = 0;
    if( preg_match('/[0-9]/', $password) ) { $passed_count++; }  // contains digit
    if( preg_match('/[^a-zA-Z0-9]/', $password) ) { $passed_count++; }  // contains symbol
    if( $passed_count > $min_passed ) {
        // valid password
    }
}

经过编辑以说明强制/可选检查

【讨论】:

    【解决方案2】:

    那么...您想要一个小写字母、一个大写字母还是一个数字?在这种情况下,/[a-zA-Z0-9]/ 就足够了。如果您也包含下划线,您甚至可以使用/\w/。但我真的看不出你打算如何使用它。

    【讨论】:

    • 三个类别中至少有两个呢?你是对的..只使用其中一个是没有意义的..我刚开始学习 php,我只是想把这作为我学习的一部分..非常感谢
    • 或者说:密码至少包含以下2个:小写字母、大写字母、数字、符号?我在网上查了很多,但似乎大部分基本上都是要求小写字母、大写字母、数字、符号中的至少一个。非常感谢您的帮助!
    • 就个人而言,我认为保护密码安全是每个人的责任。计算机猜测密码是“K1tt3n”而不是“kitten”并不是那么。如果有的话,更长的密码更强。我通常只将最小长度限制在六个字符左右。
    猜你喜欢
    • 2021-04-21
    • 1970-01-01
    • 2021-09-08
    • 2023-01-19
    相关资源
    最近更新 更多