Проверьте несколько $ _POST с preg_match - PullRequest
0 голосов
/ 29 июня 2019

Просто небольшой вопрос о правильном форматировании функции preg_match для проверки моих множественных входов (имя пользователя, пароль и капча)

в основном код работает для всех трех входов, но я не уверен«правильного» способа использования ist.Я просто хочу знать, есть ли разница между ,$var1 or $var2 or $var3 или ,$var1 ,$var2 ,$var3

Он работает с обоими кодами, поэтому я немного запутался, если один "лучше" или это не имеет значения.Или один является более «чистой» версией.

if(isset($_GET['login'])) {
    if(!preg_match("/^[a-zA-Z._ ]{1,12}$/",$_POST['username'] ,$_POST['password'] ,$_POST['captcha_code'])) {
        die();
        } 

, а другой рабочий код:

if(isset($_GET['login'])) {
    if(!preg_match("/^[a-zA-Z._ ]{1,12}$/",$_POST['username'] or $_POST['password'] or $_POST['captcha_code'])) {
        die();
        } 

Ответы [ 3 ]

0 голосов
/ 29 июня 2019

Чтобы сопоставить три строки с одним шаблоном, вы можете попробовать этот код.

$pattern = "/^[a-zA-Z._ ]{1,12}$/";
if(!preg_match($pattern, $_POST['username'])
   or !preg_match($pattern, $_POST['password'])
   or !preg_match($pattern, $_POST['captcha_code'])) {
   die();
} 
0 голосов
/ 29 июня 2019

Другой способ - использовать цикл foreach:

foreach ( ['username','password','captcha_code'] as $key ) {
    if ( !preg_match("/^[a-zA-Z._ ]{1,12}$/", $_POST[$key]) ) {
        die();
    }
}
0 голосов
/ 29 июня 2019

Ну, $var1 or $var2 or $var3, очевидно, совершенно не так. Вы не можете or строки и ожидать достойного результата. В большинстве случаев результат будет true, а это не то, что вам нужно.

Это заставляет меня усомниться в вашем утверждении: «Он работает с обоими кодами».

И да, если я проверю руководство на preg_match , очевидно, что он не принимает несколько предметов, разделенных запятыми.

Так что обе версии не работают .

Кроме того, это более общая проблема. Вы пытаетесь использовать preg_match(), чтобы ограничить возможное содержимое переменных от 1 до 12 символов из "a-zA-Z._". Это очень ограничительно. считается плохой практикой ограничивать имена пользователей и пароли следующим образом.

Вы также просто die();, когда не найдено совпадение с образцом, это не очень информативно для пользователя.

Таким образом, «более чистая» версия - исключить этот код.

Извините, что я не могу быть более позитивным ... Возможно, намек поможет?

Посмотрите на filter_input () , это то, что я сейчас использую для фильтрации ввода.

...