2016-08-05 2 views
1

Я проверяю логин и пароль из своей формы. Он не должен содержать никаких специальных символов. Прокомментированный return var_dump показывает правильные логин и пароль. К сожалению, ни один из if и else не возвращается вообще. Почему это происходит?Если инструкция else с preg_match не работает

$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_match возвращает только false, если произошла ошибка. Он вернет 0, если шаблон не соответствует, поэтому использование !== false, вероятно, не очень хорошее сравнение, потому что в то время как 0 == false (равенство), 0 !== false (личность).

Без полного рассмотрения ваших регулярных выражений я бы предложил просто дать возвращаемое значение preg_match оценить как boolean. Если совпадение найдено, оно вернет 1, которое будет оцениваться как истинное.

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

После рассмотрения вашего регулярного выражения немного, похоже, многие из персонажей есть имеет значение в регулярных выражениях и должны быть экранирована, и набор символов должен быть заключен в [], чтобы соответствовать любому символу в а не все из них. Что-то вроде:

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

Но могут быть и другие специальные символы. Может быть лучше указать, какие символы : разрешено вместо чёрных списков.