Подтверждение имен клиентов, адреса и телефона

До сих пор меня впечатлили стандартные возможности, предоставляемые Prestashop, но эта штука действительно подвела меня: если кто-то хочет зарегистрироваться на сайте или проверить гостей, он может указать в качестве своего имени что угодно. Все, что включает в себя такие вещи, как "---", все пробелы, " * " и т. Д. Здесь нет проверки, и это действительно раздражает.

Я пытался изменить метод processSubmitAccount в website\controllers\front\AuthController.php, чтобы использовать метод Validate::isName(), но это не помогает вообще. Это позволяет пользователям помещать все странные символы в поле имени. Я попытался создать еще один метод внутри класса Validate:

public static function isHumanName($name)
{    
 return preg_match('/^[A-Za-z]+$/', $name);
}

но по какой-то причине этот простой шаблон не работает. Все, что я хочу сделать, это разрешить имена типа "FirstName MiddleName", имеющие только один пробел за раз, а не в начале имени. Мои навыки php и regex минимальны, и это все, что я придумал до сих пор.

РЕДАКТИРОВАТЬ: допустимые имена будут:

  1. Имя
  2. FirstName Второй Третий Четвертый Пятый
  3. Имена могут быть без учета регистра.

После прочтения комментариев, я думаю, что я перестану проверять Адреса, столь поразительные ниже пункта.

Помимо имени я хочу проверить адреса и номера телефонов. Адреса могут иметь номера в дополнение к буквам, а номера телефонов могут содержать только цифры. Я думаю, что если проблема с проверкой имен будет решена, то я смогу сделать это и для адреса и номера.

Я был бы признателен, если бы кто-то мог направить меня в правильном направлении.

PS: Это отдельная дискуссия, является ли соблюдение политики именования правильным или неправильным. * ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Ответ на этот вопрос не означает, что читатели используют одно и то же в своих производственных приложениях для проверки имен. *

1 ответ

Решение
preg_match('/^[A-Za-z]+\s[A-Za-z]+$/', $name);

будет соответствовать:

FirstName MiddleName

Пример: http://regex101.com/r/lE5gW4

РЕДАКТИРОВАТЬ:

Хорошо, это больше соответствует тому, что запрашивает OP.

Regex:

^([A-Z][A-Za-z]+) (?:([A-Z][A-Za-z.]+) )?([A-Z][A-Za-z]+)$

Это соответствует следующим вариантам..

FirstName M. LastName
FirstName LastName
FirstName MiddleName Lastname

Пример регулярного выражения:

http://regex101.com/r/nG1vN5

Примечание: и если вы хотите разрешить ' во имя, например, в O'Brien или любые другие символы, вы можете просто добавить их в наборы символов. IE- ([A-Z][A-Za-z.']+)

Пример PHP:

$name = "FirstName M. LastName";

$truefalse = preg_match('/^([A-Z][A-Za-z]+) (?:([A-Z][A-Za-z.]+) )?([A-Z][A-Za-z]+)$/', $name);

echo $truefalse;

Выход:

1

Рабочий пример PHP:

https://eval.in/90720

Другие вопросы по тегам