我有一个php正则表达式的问题。我在JS中有相同的正则表达式,它的工作原理。我不知道这是什么问题。
这是php代码正则表达式:
echo $password; // 9Gq!Q23Lne;<||.'/\
$reg_password = "/^[-_0-9a-záàâäãåçéèêëíìîïñóòôöõúùûüýÿæœÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝŸÆŒ0\d!@#$%^&*()_\+\{\}:\"<>?\|\[\];\',\.\/\x5c~]{6,30}$/i";
if(isset($password) &&
(!preg_match($reg_password, $password) || !preg_match("#[a-z]#", $password) || !preg_match("#[\d]#", $password))
){
echo "you failed";
}
来自html输入的原始密码:
9Gq!Q23Lne;<||.\'/\
它与$ reg_password之前的值相同。
我使用mysqli方法的escape_string进行测试,但它也不起作用:
$password = $this->db->escape_string($password);
echo $password; // 9Gq!Q23Lne;<||.\'/\\
我不知道我的问题是什么,因为我已经使用regex101.com来测试它并且它有效..
有什么想法吗? 感谢
答案 0 :(得分:2)
在你的模式中,你需要使用单引号而不是double;)
所以它会像这样
$reg_password = '/^[-_0-9a-záàâäãåçéèêëíìîïñóòôöõúùûüýÿæœÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝŸÆŒ0\d!@#$%^&*()_\+\{\}:\"<>?\|\[\];\',\.\/\x5c~]{6,30}$/i';
答案 1 :(得分:0)
您无需多次致电preg_match
,只需使用预测来强制执行您的规则,就像在此正则表达式中一样:
^(?=.*?\d)(?=.*?[a-z])[-\wáàâäãåçéèêëíìîïñóòôöõúùûüýÿæœÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝŸÆŒ0\d!@#$%^&*()+{}:"<>?|\[\];',./\x5c~]{6,30}$
<强>代码:强>
$re = "`^(?=.*?\\d)(?=.*?[a-z])[-\\wáàâäãåçéèêëíìîïñóòôöõúùûüýÿæœÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝŸÆŒ0\\d!@#$%^&*()+{}:\"<>?|\\[\\];',./\\x5c~]{6,30}$`mu";
$str = "9Gq!Q23Lne;<||.\'/\\";
if (!preg_match($re, $input)) {
echo "you failed";
}