您可以为我解决这个问题,我想验证密码是否符合特定要求,这些要求是: -必须包含数字,大写字母和特殊字符。它也必须介于8到12个字符之间。制作以下模式:
$special_chars = '!@#$%^&*()';
$pattern = "/[A-Z0-9{$special_chars}]{8,12}/";
$password = '$dsd%FG23X';
preg_match($pattern, $password, $matches);
但是它不起作用,我需要知道正确的模式是什么。
答案 0 :(得分:1)
尝试使用积极的前瞻性。我已经使用regex101来构建表达式。首先,我们检查所需的字符,然后检查长度。这是我想出的:
$special_chars = '!@#$%^&*(),.`';
$pattern = '/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[' . $special_chars . ']).*$/';
$password = '$dsd%FG23X';
preg_match($pattern, $password, $matches);
$password_validated = false;
if (strlen($password) >= 8 && strlen($password) < 50)
{
if ( ! empty($matches)) {
$password_validated = true;
}
}
var_dump($password_validated);
返回:
bool(true)
顺便说一句,最好有一个最小的密码长度,但要有这么短的最大密码长度是个坏主意。您应该允许用户使用更复杂的字符,并考虑允许使用一些慷慨的字符,例如50个字符。我使用KeePass生成密码,通常密码长度至少为20个字符。
希望这会有所帮助!