Подтверждение имен клиентов, адреса и телефона
До сих пор меня впечатлили стандартные возможности, предоставляемые 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 минимальны, и это все, что я придумал до сих пор.
РЕДАКТИРОВАТЬ: допустимые имена будут:
- Имя
- FirstName Второй Третий Четвертый Пятый
- Имена могут быть без учета регистра.
После прочтения комментариев, я думаю, что я перестану проверять Адреса, столь поразительные ниже пункта.
Помимо имени я хочу проверить адреса и номера телефонов. Адреса могут иметь номера в дополнение к буквам, а номера телефонов могут содержать только цифры. Я думаю, что если проблема с проверкой имен будет решена, то я смогу сделать это и для адреса и номера.
Я был бы признателен, если бы кто-то мог направить меня в правильном направлении.
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
Пример регулярного выражения:
Примечание: и если вы хотите разрешить '
во имя, например, в 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: