По моему нужна регулярка... разрешить только en или ru буквы

Сенсей

Новичок
По моему нужна регулярка... разрешить только en или ru буквы

Сейчас при регистрации пользователя он может придумать себе логин в котором нет ни какого ограничения на символы.

Требуется проверка на использовании в логине одновременно нескольких языков...

То есть если по простому что бы не было такой вот батвы :

Sensey
Sеnsеy

Выглядят одинакого - но в нижнем буква е - русская ...

Вот нужна проверка на зепрт использования тако фигня.. но не запрещая использование различных знаков типа !"№;%:?**(

и т.д
 

AHTIXPICT

Новичок
Может так?

if ( !preg_match("/^[a-zA-Z0-9\_]+$/", $login) && !preg_match("/^[а-яА-Я0-9\_]+$/", $login) ) echo "ERROR!";
 

Nimous

Guest
Можно попробовать создать некий массив соответствий букв,
и по нему проверять

Хотя решение AHTIXPICT конечно красивее.
 

Сенсей

Новичок
AHTIXPICT
Почти то что мне нужно... только вот для твоего решение логин вида:

-= сенсей =-

То есть он различные символы считает за английские буквы...
мне нужно что бы проверка действовала исключительно на буквы.. а не на все символы....
 

Long

Новичок
алгоритм:
1. Проверить, есть ли в тексте хоть одна русская буква.
2. Проверить, есть ли в тексте хоть одна латинская буква.
3. Сделать xor.
(с) Crazy
 

Сенсей

Новичок
1. Проверить, есть ли в тексте хоть одна русская буква.
2. Проверить, есть ли в тексте хоть одна латинская буква.
----------

Ну а как думаешь для чего мне регулярка нужна?

А xor мне не нужен... ибо ники еще могут быть на других языках.... например на иврите...

Мне главное что бы не проходила каша с русских и английских букв
 

sakon

П..и.н..ок
if ( preg_match("/[a-zA-Z]+/", $login) && preg_match("/[а-яА-ЯёЁ]+/", $login) ) echo "ERROR!";
 

Сенсей

Новичок
sakon
Пропускает как русские и английские... так и их комбинирование...
 

SelenIT

IT-лунатик :)
PHP:
if (preg_match('!([a-z](?=[а-яё])|[а-яё](?=[a-z]))!i', $login)) echo 'Мешанина русских и латинских букв!';
 

sakon

П..и.н..ок
У меня не пропускает
PHP:
$login = 'фывап123%;№'; // ок
PHP:
$login = 'qwert654#$%'; // ok
PHP:
$login = 'qwert-йёклм'; // ERROR!
 

Сенсей

Новичок
if (eregi("[a-zA-Z]", $_POST['user_nickname']) && eregi("[а-яА-ЯёЁ]", $_POST['user_nickname']))

по моему так работает...

-~{}~ 13.10.05 22:06:

SelenIT
Твое работает на:

ЫЫЫЫFFFFF

но на:

ЫЫЫ FFFFF

уже не действует ибо есть пробел или люые другие символы...

-~{}~ 13.10.05 22:09:

sakon
А у меня пропускает все подряд...
 

SelenIT

IT-лунатик :)
Согласен, нужно немного доработать:
PHP:
!(?:[a-z](?=.*[а-яё])|[а-яё](?=.*[a-z]))!i
пожалуй, перемудрил со скобками, можно чуть проще:
PHP:
!(?:[a-z].*[а-яё]|[а-яё].*[a-z])!i
 

sakon

П..и.н..ок
Сенсей
А ты не cut&paste, а вручную перебей код. я думаю все будет ок.
 

Long

Новичок
Сенсей ты можешь написать регулярное выражение, которое проверяет на наличие буквы латинского алфавита? а теперь тоже самое для русского алфавита?
не, если хочется извратится - вперед.
 

Сенсей

Новичок
SelenIT
Вот терь все пашет...

А что скажешь насчет моего

Код:
if (eregi("[a-zA-Z]", $_POST['user_nickname']) && eregi("[а-яА-ЯёЁ]", $_POST['user_nickname']))
?

Ведь работает же тоже... логику хочу понять...

sakon
заработало

всем tnx
 

Lews

Новичок
А что тут непонятного?
Если ( есть английские буквы И есть русские буквы) ТО плохо
 

SelenIT

IT-лунатик :)
Сенсей
что скажешь насчет моего
Скажу, что если используешь eregi, то незачем писать символы в обоих регистрах :)
А логика та же самая, что у sakonа, и фактически (с 1 различием) реализует алгоритм Longа.
 

Денч

Новичок
А может без регулярок обойтись?
В цикле пройтись по буквам:
если первая буква - латинская, то ждем русскую, если попалась русская, то отклоняем.
И наоборот - если первая русская, то ждем латиницу, если попалась, отклоняем.
А всякую фигню, типа !"№;%: - просто пропускаем..

ЗЫ понимаю, что вопрос решен, просто как альтернатива...
 

kruglov

Новичок
Денч
это получится примерно как регулярки обрабатываются на низком уровне.
 
Сверху