问答 / 0 / 13 / 创建于 1年前
现在我需要密码策略满足几个条件需要至少一个字母,一个数字,一个特殊字符,然后长度在8-32位这正则需要怎么写的?
$password = "Abc123!"; // 替换为你要检查的密码
$pattern = "/^(?=.*[a-zA-Z])(?=.\d)(?=.[!@#$%^&*()-_=+{}[]<>/?]).{8,32}$/";
if (preg_match($pattern, $password)) { echo "密码符合要求"; } else { echo "密码不符合要求"; }
chatgpt写的
^(?=.*[A-Za-z])(?=.\d)(?=.[@$!%?&])[A-Za-z\d@$!%?&]{8,32}$
我认识的正则很难实现这个
正则是按顺序匹配的, 字母、数字、符号出现的顺序可能是不一样的
再加上长度限制,还不如直接 strlen 来的快
strlen
PS : 正则的性能也是个问题,如果用正则实现,复杂度应该不低。
Strong Password Checker 强密码检查
@donggan 貌似真的可以实现, 学习了
<?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"; } ?>
<?php
$regex = ‘/^(?=.*[A-Za-z])(?=.\d)(?=.[$@$!%#?&])[A-Za-z\d$@$!%#?&]{8,32}$/‘;
if (preg_match($regex, $password)) { // 密码合法} else { // 密码不合法}
解释如下:
为啥不使用 laravel 的表单验证呢?
表单验证《Laravel 10 中文文档》
你们都不用gpt的吗
正则不会,这样可以实现,没考虑中文的情况。
/** * 包含数字、字母、特殊字符,返回 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; }
我要举报该,理由是:
$password = "Abc123!"; // 替换为你要检查的密码
$pattern = "/^(?=.*[a-zA-Z])(?=.\d)(?=.[!@#$%^&*()-_=+{}[]<>/?]).{8,32}$/";
if (preg_match($pattern, $password)) { echo "密码符合要求"; } else { echo "密码不符合要求"; }
chatgpt写的
^(?=.*[A-Za-z])(?=.\d)(?=.[@$!%?&])[A-Za-z\d@$!%?&]{8,32}$
我认识的正则很难实现这个
正则是按顺序匹配的, 字母、数字、符号出现的顺序可能是不一样的
再加上长度限制,还不如直接
strlen
来的快PS : 正则的性能也是个问题,如果用正则实现,复杂度应该不低。
Strong Password Checker 强密码检查
<?php
$regex = ‘/^(?=.*[A-Za-z])(?=.\d)(?=.[$@$!%#?&])[A-Za-z\d$@$!%#?&]{8,32}$/‘;
if (preg_match($regex, $password)) {
// 密码合法
} else {
// 密码不合法
}
解释如下:
这样就可以验证用户输入的密码是否符合复杂规则的要求了。你也可以根据需要调整规则或增加其他限制
为啥不使用 laravel 的表单验证呢?
表单验证《Laravel 10 中文文档》
你们都不用gpt的吗
正则不会,这样可以实现,没考虑中文的情况。