讨论数量:
$password = "Abc123!"; // 替换为你要检查的密码
$pattern = "/^(?=.*[a-zA-Z])(?=.\d)(?=.[!@#$%^&*()-_=+{}[]<>/?]).{8,32}$/";
if (preg_match($pattern, $password)) { echo "密码符合要求"; } else { echo "密码不符合要求"; }
chatgpt写的
<?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 {
// 密码不合法
}
解释如下:
- ^ 和 $ 表示密码必须匹配整个字符串,不能只是部分符合
- (?=.*[A-Za-z]) 表示必须包含至少一个英文字母
- (?=.*\d) 表示必须包含至少一个数字
- (?=.*[$@$!%*#?&]) 表示必须包含至少一个特殊符号,这里是 $@%等符号
- [A-Za-z\d$@$!%*#?&]{8,32} 表示总长度必须在8-32位之间
这样就可以验证用户输入的密码是否符合复杂规则的要求了。你也可以根据需要调整规则或增加其他限制
正则不会,这样可以实现,没考虑中文的情况。
/**
* 包含数字、字母、特殊字符,返回 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;
}
推荐文章: