Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проверка имени пользователя
 
 автор: KonstRuctor   (14.10.2012 в 12:51)   письмо автору
 
 

Казалось бы, элементарная процедура, но хочется проверку сделать более сложной, нежели стандартное "буквы, цифры, знак подчеркивания".

Что же хочется иметь на выходе (в скобках чего уже я добился)
Имя пользователя:
1) Буквы русского и английского алфавита, хотя бы одна буква (сделано)
2) Цифры, причем только из цифр не катит (сделано)
3) Знак подчеркивания – только один, не в начале и не в конце (???)
4) Начинаем имя только с буквы (сделано)
5) Длина имени от 4 до 20 символов (сделано)

Примеры:
Хорошо: Вася_Пупкин, Вася_1988, В_ясяПупкин, Vasya_Pupkin и прочие варианты Васи
Плохо: vas, 1vas, _vasya, vasya_, v__asya, ______, 123456, vassissualiypupkine1234567890

Начал писать регулярку с вот этого:
$template = "/^[a-zA-Zа-яА-ЯёЁ][a-zA-Zа-яА-ЯёЁ0-9_]{4,20}$/";

По сути мне осталось только проверить, чтобы символ подчеркивания был только один и не в конце строки.
Может быть, уже поднималась эта тема? Я не нашел.

  Ответить  
 
 автор: Sfinks   (14.10.2012 в 20:53)   письмо автору
 
   для: KonstRuctor   (14.10.2012 в 12:51)
 

Сомневаюсь что сможете это сделать одним выражением.
Могу предложить такой вариант:
<?
  $template 
"/^[a-zа-яё][a-zа-яё\d]*(_[a-zа-яё\d]+)?$/i";

Но общую длину придется проверить отдельно функцией strlen();

  Ответить  
 
 автор: в три прохода :)   (15.10.2012 в 20:26)
 
   для: KonstRuctor   (14.10.2012 в 12:51)
 

$template = "/^(?![\d_]|.+_$)[0-9A-Z_a-zА-Яа-яёЁ]{4,20}$/";

  Ответить  
 
 автор: Sfinks   (16.10.2012 в 08:29)   письмо автору
 
   для: в три прохода :)   (15.10.2012 в 20:26)
 

Если бы не условие: -Один символ подчеркивания, - то да.
А так "v_a_s_y_a" проходит без проблем.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования