Как я могу проверить форму POST содержит только буквы на нескольких полях, используя preg_match? - PullRequest
1 голос
/ 20 октября 2011

У меня есть текущий код, который позволяет мне проверять имя пользователя в регистрационной форме, чтобы убедиться, что он содержит только буквы, пробелы и тире. Однако как я могу включить проверку нескольких полей (например, фамилии тоже).

/* Checks if the first name only includes letters, dashes or spaces */
   if(preg_match("/^[a-zA-Z -]+$/", $_POST['firstname']) == 0)
        $errors .="Your name must only include letters, dashes, or spaces.";

Я попробовал следующее, но, кажется, проверяет только одно или другое, но не оба.

  if(preg_match("/^[a-zA-Z -]+$/", $_POST['firstname'], $_POST['lastname']) == 0)

, а также:

if(preg_match("/^[a-zA-Z -]+$/", $_POST['firstname'] and $_POST['lastname']) == 0)

Заранее спасибо за любые предложения.

Ответы [ 5 ]

3 голосов
/ 20 октября 2011

Поскольку оба поля будут проверены с одним и тем же регулярным выражением, и вы не хотите возвращать какой-либо конкретный отзыв о том, какое из них, если оно есть, не удалось, вы можете просто объединить две строки.

if(preg_match("/^[a-zA-Z -]+$/", $_POST['firstname'] . $_POST['lastname']) == 0)
1 голос
/ 20 октября 2011

Вы можете использовать preg_grep, то есть preg_match для массивов.

$results = preg_grep('/[^a-zA-Z -]/', $_POST);
if (count($results) > 0) {
   die("Some field has invalid characters");
}

Но, как указывал AurimasL выше, вы, вероятно, захотите проверить каждое поле индивидуально, так что вы можете дать лучшую обратную связь, а не просто одеяло "Вы облажались, исправьте это!" ошибка.

Конечно, ничто не говорит о том, что вы не можете использовать этот preg_grep как быструю / грязную проверку для ЛЮБЫХ ошибок, а затем выполнять отдельные проверки полей на случай, если есть ошибки.

0 голосов
/ 20 октября 2011

Решение вашей проблемы называется: копирование и вставка.

Вам нужно две проверки if или как минимум два условия. Вы не можете передать два параметра для проверки на preg_match.

Это стиль обозначения, который я бы посоветовал вам (даже если бы я получил за это замечание):

if ( preg_match("/^[a-zA-Z -]+$/", $_POST['firstname'])
and  preg_match("/^[a-zA-Z -]+$/", $_POST['lastname'])  )
{
    ...
}

Важно отметить, что круглые скобки должны закрываться вокруг каждого вызова preg_match (...). Внешние паренсы для if () должны выделяться. Если вы плохо знакомы с языком, вы должны усердно работать с форматированием.

Если вы хотите проверить условие соответствия not , то перед каждым вызовом preg_match() начинайте с ! NOT.

0 голосов
/ 20 октября 2011

Проверить каждое поле

 if (preg_match("/^[a-zA-Z\s-]+$/i", $_POST['firstname']) == 0) {
   $errors .="Your name must only include letters, dashes, or spaces.";
 }
 if(preg_match("/^[a-zA-Z\s-]+$/i",    $_POST['lastname']) == 0) {
   $errors .="Your lastname must only include letters, dashes, or spaces.";
 }

Или оба (если имя пользователя и фамилия разделены пробелом)

 if(preg_match("/^([a-zA-Z\s-]+)\s+([a-zA-Z\s-]+)$/i",$_POST['lastname'] . $_POST['lastname']) == 0) {

}
0 голосов
/ 20 октября 2011

Вы можете делать такие вещи, используя preg_match, но это очень грязная вещь , потому что вы никогда не узнаете, что такое поле, которое не уважает ваши правила.Вы можете объединить строки, как в примере:

if(preg_match("/^[a-zA-Z -]+$/", $_POST['firstname'] . $_POST['lastname']) == 0)

В любом случае, я предлагаю вам проверить каждое поле индивидуально и не делать такого рода вещи.

...