Php 使用preg_match进行验证

Php 使用preg_match进行验证,php,preg-match,Php,Preg Match,您可以帮助我解决这个问题,我想验证一个具有特定要求的密码,具体要求如下: -它必须包含数字、大写字母和特殊字符。它还必须介于8到12个字符之间。制作以下图案: $special_chars = '!@#$%^&*()'; $pattern = "/[A-Z0-9{$special_chars}]{8,12}/"; $password = '$dsd%FG23X'; preg_match($pattern, $password, $matches); 但它不起作用,我需要知道正确的模式是

您可以帮助我解决这个问题,我想验证一个具有特定要求的密码,具体要求如下: -它必须包含数字、大写字母和特殊字符。它还必须介于8到12个字符之间。制作以下图案:

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

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

尝试使用积极的前瞻。我曾经构建过表达式。首先检查所需的字符,然后检查长度。以下是我的想法:

$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);
顺便说一下,有一个最小的密码长度是好的,但有这么短的最大密码长度是个坏主意。你应该允许用户拥有更复杂的字符,考虑允许一些慷慨的东西,比如50个字符。我使用生成密码,密码长度通常至少为20个字符


希望这有帮助

但这将返回一个完全小写的字符串值。看起来您也添加了字符
[\124;]\\\\`
。查看ASCII表以查看
a-z
包含的内容。问题是,如果删除相等的数字,则返回字符串。这是有问题的,因为我想要一个需要数字、大写字母和特殊字符的模式。@MarcosDavidHuarangaOrtega我已经编辑了我的答案,现在试试。现在你的代码可以工作了。但是我之前评论的想法是删除
(?=.{8,12})
之前无用的
*
,而不是前瞻本身。也可能重复,请参阅
bool(true)