Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中,Regex语句总是返回false_Php_Regex - Fatal编程技术网

在PHP中,Regex语句总是返回false

在PHP中,Regex语句总是返回false,php,regex,Php,Regex,我正在尝试检查密码,以确保它们至少包含1个大写、小写和一个数字。我已经对此进行了研究,但无法找到为什么每次都返回false。例如,我输入了CHEDDA123,它仍然返回false,并且不会发布到我的数据库 $password = $_GET["password"]; $regex = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$"; $query="INSERT INTO `users`(`username`, `password`, `scho

我正在尝试检查密码,以确保它们至少包含1个大写、小写和一个数字。我已经对此进行了研究,但无法找到为什么每次都返回false。例如,我输入了CHEDDA123,它仍然返回false,并且不会发布到我的数据库

$password = $_GET["password"];
$regex = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$";
$query="INSERT INTO `users`(`username`, `password`, `school`, `grade`,`email`, `classes`, `firstname`, `lastname`) VALUES ('$username','$password','$school','$grade','$email','$school','$firstname','$firstname')";
if (preg_match($regex, $password)){
    $result = mysql_query($query);
    if (!$result) {
        $message  = 'Invalid query: ' . mysql_error() . "\n";
        $message  = 'Whole query: ' . $query;
        die($message);
    }
}else{
    $numb = 'true';
    $cap = 'true';
    if (preg_match($regex, $password)){
        $numb = 'false';
    }
    if (preg_match($regex, $password)){
        $cap = 'false';
    }
    echo $cap;
    echo $numb;
}
?>

我编辑并测试了你的正则表达式。将正则表达式替换为:

$regex = "/^((?=.*[a-z])(?=.*[A-Z])(?=.*\d))[a-zA-Z\d]{8,}$/";
和测试:

$password_good = "Thecedda123"; // Ok

$password_bad_1 = "hechedda123"; // Upper case missed

$password_bad_2 = "TTTTTTTTTT123"; // Lower case missed

$password_bad_3 = "Thechedda"; // Digit missed

$password_bad_4 = "Th123"; // Less then 8 characters

$password_bad_5 = "1234567890"; // Letters missed

// Result:

echo preg_match($regex, $password_good); // true

echo preg_match($regex, $password_bad_1); // false

echo preg_match($regex, $password_bad_2); // false

echo preg_match($regex, $password_bad_3); // false

echo preg_match($regex, $password_bad_4); // false

echo preg_match($regex, $password_bad_5); // false

分隔符丢失<代码>$regex='~^(?=.[a-z])(?=.[a-z])(?=...\d)[a-zA-z\d]{8,}$~'请。已在PHP7中删除。了解使用PDO的语句并考虑使用PDO,请使用PHP来处理密码安全性。如果您使用的PHP版本低于5.5,则可以使用
密码\u hash()
。允许用户使用他们想要的密码,正则表达式(即使有效)也不正确。它必须锚定在起点。不需要在一组lookaheads上使用量词。好吧,@WiktorStribiżew,我添加了锚并删除了量词,它也起作用了;)非常感谢你!很抱歉回复太晚,我忘记回复了。效果很好!