麻烦问下php这个正则需要怎么写的?

现在我需要密码策略满足几个条件
需要至少一个字母,一个数字,一个特殊字符,然后长度在8-32位
这正则需要怎么写的?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 13

$password = "Abc123!"; // 替换为你要检查的密码

$pattern = "/^(?=.*[a-zA-Z])(?=.\d)(?=.[!@#$%^&*()-_=+{}[]<>/?]).{8,32}$/";

if (preg_match($pattern, $password)) { echo "密码符合要求"; } else { echo "密码不符合要求"; }

chatgpt写的

1年前 评论

^(?=.*[A-Za-z])(?=.\d)(?=.[@$!%?&])[A-Za-z\d@$!%?&]{8,32}$

1年前 评论
slw415 (作者) 1年前

我认识的正则很难实现这个

正则是按顺序匹配的, 字母、数字、符号出现的顺序可能是不一样的

再加上长度限制,还不如直接 strlen 来的快

PS : 正则的性能也是个问题,如果用正则实现,复杂度应该不低。

Strong Password Checker 强密码检查

1年前 评论
donggan (楼主) 1年前
kis龍 (作者) 1年前
kis龍 (作者) 1年前
donggan (楼主) 1年前
<?php
$password = "Password123@";
$pattern = "/^(?=.*[A-Za-z])(?=.*\d)(?=.*[@#$%^&+=])(?!.*\s).{8,32}$/";

if (preg_match($pattern, $password)) {
    echo "Password is valid";
} else {
    echo "Password is invalid";
}
?>
1年前 评论

<?php

$regex = ‘/^(?=.*[A-Za-z])(?=.\d)(?=.[$@$!%#?&])[A-Za-z\d$@$!%#?&]{8,32}$/‘;

if (preg_match($regex, $password)) {
// 密码合法
} else {
// 密码不合法
}

解释如下:

  • ^ 和 $ 表示密码必须匹配整个字符串,不能只是部分符合
  • (?=.*[A-Za-z]) 表示必须包含至少一个英文字母
  • (?=.*\d) 表示必须包含至少一个数字
  • (?=.*[$@$!%*#?&]) 表示必须包含至少一个特殊符号,这里是 $@%等符号
  • [A-Za-z\d$@$!%*#?&]{8,32} 表示总长度必须在8-32位之间
    这样就可以验证用户输入的密码是否符合复杂规则的要求了。你也可以根据需要调整规则或增加其他限制
1年前 评论

正则不会,这样可以实现,没考虑中文的情况。

/**
 * 包含数字、字母、特殊字符,返回 true,否则返回 false
 *
 * @param $pass
 *
 * @return bool
 */
function password_check($pass)
{
    $len = strlen($pass);
    if ($len < 8 || $len > 32) {
        return false;
    }
    // 在此添加需要的特殊字符
    $special = [
        '!' => true,
        '?' => true,
        '/' => true,
        '>' => true,
        '<' => true,
        ']' => true,
        '[' => true,
        '&' => true,
    ];
    $have_num = $have_char = $have_special = false;
    for ($i = 0; $i < $len; $i++) {
        if (!$have_char && ctype_alpha($pass[$i])) {
            $have_char = true;
        }
        if (!$have_num && ctype_digit($pass[$i])) {
            $have_num = true;
        }
        if (!$have_special && isset($special[$pass[$i]])) {
            $have_special = true;
        }

        if ($have_num && $have_char && $have_special) {
            return true;
        }
    }
    return $have_num && $have_char && $have_special;
}
1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!