Вот такое дело, взял когда то давно с дцмс регулярку, вроде бы работало, но вот щас заметил только одну вещь - если вводить Логин и после пробела цифры регулярка принимает это как цифры, что не так?
[php:1:3966bc2c76]
if(preg_match('#[a-z]#iu', $login) && preg_match('#[а-я]#iu', $login)) $err[]='В нике можно использовать только буквы 1 алфавита';
if(preg_match('#[0-9]#iu', $login)) $err[]='Ник не может содержать одни только цифры';
if( !preg_match("#^([A-zА-я0-9\-\_\ ])+$#ui", $login)) $err[]='В нике присутствуют запрещенные символы';
[/php:1:3966bc2c76]
Ну и другие показал заодно, не все с дцмс конечно, просто правильно ли работают они?
Вторая регулярка неправильная.
Для того чтоб проверить содержутся ли в строке только цифры нужно ограничивать строку начальным и конечным символом.
[php:1:d554940815]if(preg_match('~^\d+$~', $login) != 0) $err[]='Ник не может содержать одни только цифры';[/php:1:d554940815]
Модификаторы в регулярках расставлены с полным незнанием.
В третей регулярке экранируется всё, что только захочется. Использование интервалов A-z и А-я неуместно в сочетании с модификатором i.
Достаточно написать a-z и а-я.
Символ "_" не является специальным и экранированию не подлежит, точно так же как и пробельный символ.
Символ "-" не подлежит экранированию, если он находится в конце маски.
Регулярка должна выглядить так:
~^[^\wа-я\s-]+$~iu
одним словом, DCMS дырявое корыто
Плюс первая регулярка не пропускает такие символы, как ёЁ, ґҐ, їЇ, и еще белорусская у с диакритическим знаком.
А эти символы могут запросто использоваться в алфавите, не стоит забывать, что могут быть и украинские пользователи.
Akdmeh, да, "ё" не входит в интервал а-я. Эту букву можно добавить, но вот на счёт остальных - я бы не делал.
Если сайт русскоязычный то пусть пользователи подстраиваются под него, или регистрируют ники на латинице.
4, лучи ненависти тебе от Андрія и Олени Анатоліївни
Да, можно проигнорировать, но нужно понимать специфику аудитории, плюс не забывать о ёЁ
Как сделать тогда правильные регулярки или от куда вытянуть на крайняк, потому что знаний их у меня вообще нет
я думал у Desure хоть они есть
Так, вроде бы исправил, вышло так:
[php:1:8af4d8f22f]
if(preg_match('#[a-z]#iu', $login) && preg_match('#[а-я]#iu', $login)) $err[]='В нике можно использовать только буквы 1 алфавита';
if(preg_match('~^\d+$~', $login) != 0) $err[]='Ник не может содержать одни только цифры';
if( !preg_match("~^[^\wа-я\s-]+$~iu", $login)) $err[]='В нике присутствуют запрещенные символы';
[/php:1:8af4d8f22f]
Okula, ну вот как в предыдущем посте.
Чтоб в ники не использовали разные алфвавиты, то есть с виду ники разные для кода, а визуально одинаковые.
Чтоб ник был не из одних только символов, чтоб буква хоть 1 была.
ну и все, цифры - это те же символы по сути, думаю больше и не надо
Вот:
[php:1:5233b94f62]if(preg_match('~[a-z]~i', $string) != 0 && preg_match('~[а-яё]~iu', $string) != 0)
$error = 'В нике можно использовать только кириллицу или латинский алфавит!';
elseif(preg_match('~^\d+$~', $string) != 0)
$error = 'Ник не может состоять только из цифр!';
elseif(preg_match('~^[a-zа-яё\d]+$~iu', $string) == 0)
$errror = 'Запрещённые символы в нике!';
else {
echo 'Все проверки прошли успешно!';
}[/php:1:5233b94f62]
Логин может состоять только из букв кириллицы или латиницы с содержанием цифр.