Помогите разобраться Использую вот такой простейший код:
if( !preg_match("/^[a-zа-я]{3,15}/iu", $name)) echo 'Имя указано не корректно.';
Проверка не регистрирует когда $name имеет следующие значения:
$name 'testname testname'; $name 'testnametestnametestnametestname';
Когда есть пробел или больше 15 символов... Что не так?
Разобрался) Вот так сделал
if( !preg_match("/^[a-zа-я]{3,15}+$/ui", $name)
В исходном выражении ^[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";
}
}
См. демо
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости