помогите составить регулярное выражение

terex

Guest
помогите составить регулярное выражение

Нужно написать выражение, проверяющее правильность имени пользователя, регистрирующегося на форуме. Проблемы вызывает следующий момент: ник может состоять из символов _ A-Z a-z А-Я а-я и пробела. Но надо сделать так, чтобы ники, в которых использованы символы из обоих алфафитов (кирилицы и латиницы) не проходили проверку на валидность.

Пишу так:

/^[[_A-Za-z0-9 ]|[_А-Яа-я0-9 ]]{3,40}$/

Не работает. В смысле, строки с кирилицей и латиницей вперемешку проходят проверку :( Как правильно?
 

terex

Guest
Спасибо!

А тепер главное - почему мой вариант не работает? :))
 

AlexVN

Новичок
[[_A-Za-z0-9 ]|[_А-Яа-я0-9 ]] - не правильно.
[] обозначает даипазон символов, в нем | обозначет такой символ, а не разделитель альтернативных групп.
Еще проще:
^[_A-Za-zА-Яа-я0-9 ]{3,40}$
 

Yukko

Новичок
Чисто теоретический вопрос, а зачем в имени пользователя на форуме пробел?
Вопрос второй, зачем квантификатор стоит {3,40}?

мой ответ:
preg_match("/(?(?=[^a-z]*[a-z])^[_a-z\s]{3,40}$|^[_а-я\s]{3,40}$)/i","ыдdfdf", $matches);
print_r($matches);
прошу тестировать
 

Yukko

Новичок
IntenT
Тебе что меня повоспитывать захотелось? Удачи!

Кстати, ответ во втором посте, если вчитаться слово в слово, неправильный. К тому же я попросил протестировать мой вариант решения и ответить на два чисто теоретических вопроса.
 
Сверху