2016-08-05 3 views
1

양식에서 로그인 및 암호를 확인하고 있습니다. 특수 문자를 포함해서는 안됩니다. 댓글이 달린 return var_dump은 로그인과 비밀번호 값을 올바르게 보여줍니다. 불행히도 ifelse은 전혀 반환되지 않습니다. 왜 그런 일이 발생합니까? 에러가 발생하면preg_match가 작동하지 않는 else 문

$usernCheck = $_POST['usern']; 
$passCheck = $_POST['passn']; 
// return var_dump($usernCheck.$passCheck); 

if((preg_match("[email protected]#$%^&*()_+-=,./<>?;':\"{}[]", $usernCheck) !== false) 
    OR (preg_match("[email protected]#$%^&*()_+-=,./<>?;':\"{}[]", $passCheck) !== false)){ 
    return "Found special chars."; 
} else { 
    return "Not found special chars."; 
} 

답변

1

preg_matchfalse를 반환합니다. 패턴이 일치하지 않으면 0을 반환하므로 0 == false (0 !== false (identity)) 동안 !== false을 사용하면 아마도 좋은 비교가되지 않을 수 있습니다.

정규식을 완전히 검토하지 않고 반환 값을 preg_match으로 지정하면 부울로 평가하는 것이 좋습니다. 일치하는 항목이 발견되면 1을 반환하며 이는 사실로 평가됩니다.

if(preg_match($pattern, $usernCheck) || preg_match($pattern, $passCheck) { 
    return "Found special chars."; 
} else { 
    return "Not found special chars."; 
} 

정규식 비트를 검토 한 후,이 문자가 정규식의 의미를하고 있어야 할 많은 것 같습니다 이스케이프하고, 문자의 집합은에 어떤 문자와 일치하는 []로 묶어야합니다 목록보다 모두 개입니다. 예 :

'[[email protected]#\$%\^\&\*\(\)_\+-=,\.\/<>\?;\':\"{}\[\]]' 

하지만 다른 특수 문자가있을 수 있습니다. 특정 문자를 블랙리스트에 추가하는 대신 인 문자를 지정할 수 있습니다.