Проверка данных не правильно работает

308
10 декабря 2016, 10:46

Помогите разобраться Использую вот такой простейший код:

if( !preg_match("/^[a-zа-я]{3,15}/iu", $name)) echo 'Имя указано не корректно.';

Проверка не регистрирует когда $name имеет следующие значения:

$name 'testname testname'; $name 'testnametestnametestnametestname';

Когда есть пробел или больше 15 символов... Что не так?

Answer 1

Разобрался) Вот так сделал

if( !preg_match("/^[a-zа-я]{3,15}+$/ui", $name)

Answer 2

В исходном выражении ^[a-zа-я]{3,15} отсутствует знак конца строки $, поэтому регулярное выражение проверяет наличие указанных букв только в начале строки. Кроме того, стоит добавить модификатор D (PCRE_DOLLAR_ENDONLY).

Так как было добавлено условие на проверку только латинских и только русских букв, необходимо разделить [a-zа-я]{3,15} на 2 класса - [a-z]{3,15} и [а-яё]{3,15} и объединить их с помощью оператора | и подмаски (....) (или (?:...))

$names = array("Имя", "Name", "Nameимя", "НифигаСебеИмечко");
foreach($names as $name) {
  if( !preg_match("/^(?:[a-z]{3,15}|[а-яё]{3,15})$/Diu", $name)) {
      echo "Имя $name указано не корректно.\n";
    } else {
      echo "Имя $name указано корректно.\n";
  }
}

См. демо

READ ALSO
Помогите разобраться со скриптом ajax

Помогите разобраться со скриптом ajax

Не понимаю почему не срабатывает скрипт:

350
phpPDO insert дважды добавляет [закрыто]

phpPDO insert дважды добавляет [закрыто]

Привет всем! Делаю запрос инсерт, но выполняется оно дваждыЭто что баг?

282
оптимизация скрипта (Fatal error: Allowed memory)

оптимизация скрипта (Fatal error: Allowed memory)

Привет! Возникла проблема - при чтении из большой таблицы базы данных скрипт выдаёт ошибку:

306
Прикрепить меню к верху страницы [дубликат]

Прикрепить меню к верху страницы [дубликат]

На данный вопрос уже ответили:

346