使用preg_match进行验证

时间:2018-10-02 22:42:25

标签: php preg-match

您可以为我解决这个问题,我想验证密码是否符合特定要求,这些要求是: -必须包含数字,大写字母和特殊字符。它也必须介于8到12个字符之间。制作以下模式:

$special_chars = '!@#$%^&*()';
$pattern = "/[A-Z0-9{$special_chars}]{8,12}/";
$password = '$dsd%FG23X';
preg_match($pattern, $password, $matches);

但是它不起作用,我需要知道正确的模式是什么。

1 个答案:

答案 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个字符。

希望这会有所帮助!