Php 带有preg_match的If-else语句不起作用
我正在检查表单中的登录名和密码。它不应该包含任何特殊的字符。 注释的Php 带有preg_match的If-else语句不起作用,php,regex,Php,Regex,我正在检查表单中的登录名和密码。它不应该包含任何特殊的字符。 注释的return var_dump正确地显示了登录名和密码值。 不幸的是,if和else都没有返回。 为什么会这样 $usernCheck = $_POST['usern']; $passCheck = $_POST['passn']; // return var_dump($usernCheck.$passCheck); if( (preg_match("!@#$%^&*()_+-=,./<>?;':\"{}
return var_dump
正确地显示了登录名和密码值。
不幸的是,if
和else
都没有返回。
为什么会这样
$usernCheck = $_POST['usern'];
$passCheck = $_POST['passn'];
// return var_dump($usernCheck.$passCheck);
if( (preg_match("!@#$%^&*()_+-=,./<>?;':\"{}[]", $usernCheck) !== false)
OR (preg_match("!@#$%^&*()_+-=,./<>?;':\"{}[]", $passCheck) !== false) ){
return "Found special chars.";
} else {
return "Not found special chars.";
}
$usernCheck=$\u POST['usern'];
$passCheck=$_POST['passn'];
//返回var_dump($usernCheck.$passCheck);
如果((preg#u match(“!@$%^&*()”、./?;“:\“{}[]”、$usernCheck)!==false)
或(preg#u match(“!@$%^&*()”、./?;“:\“{}[]”、$passCheck)!==false)){
return“找到特殊字符”;
}否则{
return“未找到特殊字符”;
}
preg_match
仅在发生错误时返回false
。如果模式不匹配,它将返回0
,因此使用!==false可能不是一个好的比较,因为虽然0==false
(相等),0!==错误
(标识)
在不完全检查正则表达式的情况下,我建议让preg_match
的返回值作为布尔值计算。如果找到匹配项,它将返回1
,其计算结果为true
if( preg_match($pattern, $usernCheck) || preg_match($pattern, $passCheck) {
return "Found special chars.";
} else {
return "Not found special chars.";
}
在稍微检查一下您的正则表达式之后,这里的许多字符似乎在正则表达式中有意义,需要进行转义,并且字符集应该包含在[]
中,以匹配列表中的任何字符,而不是所有字符。比如:
'[!@#\$%\^\&\*\(\)_\+-=,\.\/<>\?;\':\"{}\[\]]'
“[!@\$%\^\&\*\(\)\+-=,\.\/\?;\”:“{}\[\]”
但可能还有其他特殊字符。最好指定允许哪些字符,而不是将特定字符列入黑名单