本文目录导读:

- 基础密码强度校验(至少8位,包含字母和数字)
- 中等级密码强度(至少8位,包含大小写字母、数字)
- 强密码(至少8位,包含大小写字母、数字、特殊字符)
- 完整的密码强度检查函数
- 分级密码强度检查
- 单行正则解法(综合强度)
- 使用建议
我来给你提供几种不同需求的PHP密码强度校验正则表达式:
基础密码强度校验(至少8位,包含字母和数字)
$pattern = '/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$/';
中等级密码强度(至少8位,包含大小写字母、数字)
$pattern = '/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$/';
强密码(至少8位,包含大小写字母、数字、特殊字符)
$pattern = '/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/';
完整的密码强度检查函数
function checkPasswordStrength($password) {
$errors = [];
// 长度检查(至少8位)
if (strlen($password) < 8) {
$errors[] = '密码长度至少8位';
}
// 包含小写字母
if (!preg_match('/[a-z]/', $password)) {
$errors[] = '必须包含小写字母';
}
// 包含大写字母
if (!preg_match('/[A-Z]/', $password)) {
$errors[] = '必须包含大写字母';
}
// 包含数字
if (!preg_match('/\d/', $password)) {
$errors[] = '必须包含数字';
}
// 包含特殊字符
if (!preg_match('/[@$!%*?&#^_+\-=.~`\[\]{}|;:",<>\'\\\\]/', $password)) {
$errors[] = '必须包含特殊字符';
}
// 检查连续重复字符(可选)
if (preg_match('/(.)\1{2,}/', $password)) {
$errors[] = '不能有连续3个相同字符';
}
// 检查常见弱密码
$weakPasswords = ['password', '12345678', 'qwerty', 'admin', 'letmein'];
if (in_array(strtolower($password), $weakPasswords)) {
$errors[] = '密码过于常见';
}
return $errors;
}
// 使用示例
$password = "Abcd1234!@#";
$errors = checkPasswordStrength($password);
if (empty($errors)) {
echo "密码强度合格";
} else {
echo "密码不满足要求:\n";
foreach ($errors as $error) {
echo "- " . $error . "\n";
}
}
分级密码强度检查
function getPasswordStrength($password) {
$score = 0;
// 长度评分
if (strlen($password) >= 8) $score += 1;
if (strlen($password) >= 12) $score += 1;
if (strlen($password) >= 16) $score += 1;
// 字符类型评分
if (preg_match('/[a-z]/', $password)) $score += 1;
if (preg_match('/[A-Z]/', $password)) $score += 1;
if (preg_match('/\d/', $password)) $score += 1;
if (preg_match('/[@$!%*?&]/', $password)) $score += 1;
// 多样性评分
$uniqueChars = count(array_unique(str_split($password)));
if ($uniqueChars > 8) $score += 1;
// 评分等级
if ($score >= 8) return '强';
if ($score >= 6) return '中';
if ($score >= 4) return '弱';
return '极弱';
}
// 使用示例
$passwords = ['a1B2c3D4!', 'password', 'Abcd1234!@#', 'abc'];
foreach ($passwords as $pwd) {
echo $pwd . " -> " . getPasswordStrength($pwd) . "\n";
}
单行正则解法(综合强度)
// 强密码(全部条件都满足)
$strong_pattern = '/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*])[a-zA-Z\d!@#$%^&*]{8,}$/';
// 中等密码(至少两类字符+长度)
$medium_pattern = '/^(?:(?=.*[a-z])(?=.*[A-Z])|(?=.*[a-z])(?=.*\d)|(?=.*[A-Z])(?=.*\d)).{8,}$/';
// 验证
if (preg_match($strong_pattern, $password)) {
echo "强密码";
} elseif (preg_match($medium_pattern, $password)) {
echo "中等密码";
} else {
echo "弱密码";
}
使用建议
- 根据实际需求选择正则模式,不必过分复杂
- 建议使用函数封装,便于维护和测试
- 考虑用户体验,给出具体的密码要求提示
- 结合其他验证,如密码确认等
选择哪种方案取决于你的安全需求和用户体验要求。