Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: проверка ника
Форумы портала PHP.SU » PHP » Регулярные выражения » проверка ника

Страниц (1): [1]
 

1. firya - 13 Июля, 2010 - 19:00:31 - перейти к сообщению
Доброго времени суток.
Нужно разрешить в нике использовать только латинские буквы люого регистра, цифры, "_" и "-", желательно: последние два символа только в центре.
Пишу следующее выражение, вроде работает допуск латинских був и цифр
CODE (htmlphp):
скопировать код в буфер обмена
  1. ereg("^[a-zA-Z0-9]+$", $text)

добавляю
CODE (htmlphp):
скопировать код в буфер обмена
  1. ereg("^[a-zA-Z0-9\_\-]+$", $text)

не работает, не подскажите что я делаю не так?
2. qbik - 13 Июля, 2010 - 19:25:34 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. preg_match("/^[A-Za-z0-9]+[-_]*[A-Za-z0-9]+$/", $text,$m);
  2. echo $m[0];
3. Uchkuma - 13 Июля, 2010 - 19:33:03 - перейти к сообщению
Во-первых, используйте preg_match вместо ereg, т.к. в последующих версиях php он будет убран.
Во-вторых, как мне кажется, ваш вариант должен работать, но знаки "_" и "-" экранировать в данном случае не нужно.
Могу посоветовать такую регулярку:
PHP:
скопировать код в буфер обмена
  1. preg_match("/^[a-z0-9]+(?:[_-][a-z0-9]+)*$/i", $text);


Такого вида ники будут запрещены:
Nickname_
_Nickname
Nick__name
Nick--name

Такого разрешены:
Nick-name
Nick_name
My-nick-name

Ну и пробелы тоже запрещены.
4. firya - 13 Июля, 2010 - 19:59:37 - перейти к сообщению
qbik, спасибо
Uchkuma, большое спасибо, то что нужно, все понял, кроме двоеточия, для чего оно?
5. Uchkuma - 13 Июля, 2010 - 20:31:13 - перейти к сообщению
Скобки в регулярке используются как для группировки, так и для указания подмаски. То что попадает в эту подмаску, записывается в массив вхождений, если указать третий параметр в функции preg_match. Чтобы то, что в скобках не учитывалось как подмаска, ее можно отключить, поставив после открывающей скобки ":?". Т.е. группа будет выглядеть так "(:? ...)". В вашем случае на работу функции это никак не повлияет - можно отключить, можно нет. У меня привычка - все, что не используется - отключить! =)
6. JustUserR - 14 Июля, 2010 - 02:21:51 - перейти к сообщению
Uchkuma пишет:
Чтобы то, что в скобках не учитывалось как подмаска, ее можно отключить, поставив после открывающей скобки ":?".
Вообще нужно использовать незапоминающие круглые скобки везде где не требуется сохранять значение в них - это не только помогает очистить массив совпадений от ненужных значений но и экономит ресурсы на создание обратных ссылок

 

Powered by ExBB FM 1.0 RC1