如何使用PHP获取并校验用户输入的符合规则的强密码
PHP 强密码校验实现方案
规则确认
明确需要满足的全部校验规则:
- 密码总长度大于8位
- 至少包含1个小写英文字母(a-z)
- 至少包含1个大写英文字母(A-Z)
- 至少包含1个数字(0-9)
- 至少包含1个特殊字符(示例范围:
!@#$%^&*()_+-=[]{}|;':",./<>?,可按需调整范围)
推荐实现:分步校验
优先推荐分步校验的方式,可读性高,后续调整规则时修改成本极低,不容易出错:
/** * 强密码校验函数 * @param string $password 待校验的密码 * @return bool 校验通过返回true,失败返回false */ function checkStrongPassword(string $password): bool { // 校验长度:大于8位即最少9位 if (strlen($password) <= 8) { return false; } // 校验是否包含大写字母 if (!preg_match('/[A-Z]/', $password)) { return false; } // 校验是否包含小写字母 if (!preg_match('/[a-z]/', $password)) { return false; } // 校验是否包含数字 if (!preg_match('/[0-9]/', $password)) { return false; } // 校验是否包含特殊字符,可按需调整正则内的特殊字符范围 if (!preg_match('/[!@#$%^&*()_+\-=\[\]{}|;:\'",.\/<>?]/', $password)) { return false; } // 全部规则校验通过 return true; }
使用示例
// 测试合法密码示例 $testPassword = 'Tesing@123'; if (checkStrongPassword($testPassword)) { echo "密码合法"; } else { echo "密码不符合要求,请检查规则"; }
可选实现:单正则校验
如果需要用单条正则完成校验,可以使用如下规则,缺点是可读性差,调整规则难度较高:
校验正则:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*()_+\-=\[\]{}|;:\'",.\/<>?]).{9,}$/
使用示例:
$testPassword = 'Tesing@123'; if (preg_match('/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*()_+\-=\[\]{}|;:\'",.\/<>?]).{9,}$/', $testPassword)) { echo "密码合法"; } else { echo "密码不符合要求"; }
内容的提问来源于stack exchange,提问作者Dilsha
相关产品推荐
相关产品推荐

