本文目录导读:

- 基础密码强度校验(至少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 "弱密码";
}
使用建议
- 根据实际需求选择正则模式,不必过分复杂
- 建议使用函数封装,便于维护和测试
- 考虑用户体验,给出具体的密码要求提示
- 结合其他验证,如密码确认等
选择哪种方案取决于你的安全需求和用户体验要求。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播