Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.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 带有preg_match的If-else语句不起作用_Php_Regex - Fatal编程技术网

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.";
}
在稍微检查一下您的正则表达式之后,这里的许多字符似乎在正则表达式中有意义,需要进行转义,并且字符集应该包含在
[]
中,以匹配列表中的任何字符,而不是所有字符。比如:

'[!@#\$%\^\&\*\(\)_\+-=,\.\/<>\?;\':\"{}\[\]]'
“[!@\$%\^\&\*\(\)\+-=,\.\/\?;\”:“{}\[\]”
但可能还有其他特殊字符。最好指定允许哪些字符,而不是将特定字符列入黑名单