Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регулярное выражение для логина, Для латиницы, кирилицы и символов -,_,. 
:(
    Опции темы
Pitbul
  Дата 24.9.2010, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Fruzenshtein
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 30.4.2008
Где: Киев

Репутация: нет
Всего: нет



Добрый день smile 
Составляю регулярное выражение для проверки логина. Критерий таков:
Могут быть такие символы:
А-Я, а-я, A-Z, a-z, 0-9, "-", "_", "."
И длина логина находится между 3 и 30 символами.

Я составил такое выражение:

Код

if (!preg_match("|^[-a-z0-9а-я/._]{3,30}$|i",$login))
    {
        exit("Были использованы запрещенные символы.");
    }


Но оно не дает необходимого результата. Помогите найти верное решение этой задачи. Спасибо smile 
--------------------
### JAVA  ######  programming ###
PM MAIL WWW ICQ Skype   Вверх
enoff
Дата 24.9.2010, 19:39 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 30.6.2010
Где: Санкт-Петербург

Репутация: 11
Всего: 13



Если строка с логином в юникоде, то необходимо добавить модификатор u.
Код

|^[-a-z0-9а-я/._]{3,30}$|iu

PM MAIL ICQ Skype GTalk   Вверх
Pitbul
Дата 24.9.2010, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Fruzenshtein
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 30.4.2008
Где: Киев

Репутация: нет
Всего: нет



enoff у меня данные приходят из формы, которая имеет charset=windows-1251

И увы, приведенное Вами регулярное выражение, приводит к ошибке smile 
--------------------
### JAVA  ######  programming ###
PM MAIL WWW ICQ Skype   Вверх
enoff
Дата 24.9.2010, 19:56 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 30.6.2010
Где: Санкт-Петербург

Репутация: 11
Всего: 13



Pitbul, ну это понятно, что к ошибке, строка-то не в юникоде, это просто было мое предположение.
Регулярка правильная.
Попробуйте выставить локаль.
http://php.net/set_locale
PM MAIL ICQ Skype GTalk   Вверх
Pitbul
Дата 24.9.2010, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Fruzenshtein
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 30.4.2008
Где: Киев

Репутация: нет
Всего: нет



enoff

Очень важное замечание на счет ЛОКАЛИ, помогло решить проблему.

В таком виде все работает превосходно:

Код

setlocale(LC_ALL, ‘RU_ru’); 
if (!preg_match("|^[-a-z0-9а-я/._]{3,30}$|i",$login))
    {
        exit("Были использованы запрещенные символы...");
    }


Но теперь смежный вопрос по поводу раскладки UA. С Украинским текстом эта регулярка не дружит. Можно ли с помощью функции setlocale() указать перечень алфавитов? smile 
--------------------
### JAVA  ######  programming ###
PM MAIL WWW ICQ Skype   Вверх
enoff
Дата 24.9.2010, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 30.6.2010
Где: Санкт-Петербург

Репутация: 11
Всего: 13



uk_UK?
PM MAIL ICQ Skype GTalk   Вверх
Pitbul
  Дата 24.9.2010, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Fruzenshtein
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 30.4.2008
Где: Киев

Репутация: нет
Всего: нет



UK_uk - это для Англии, а мне надо для Украины (UA_ua) smile 
--------------------
### JAVA  ######  programming ###
PM MAIL WWW ICQ Skype   Вверх
enoff
Дата 24.9.2010, 20:42 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 30.6.2010
Где: Санкт-Петербург

Репутация: 11
Всего: 13



http://www.w3.org/WAI/ER/IG/ert/iso639.htm
в самом низу  smile 
PM MAIL ICQ Skype GTalk   Вверх
Pitbul
  Дата 24.9.2010, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Fruzenshtein
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 30.4.2008
Где: Киев

Репутация: нет
Всего: нет



enoff

Действительно UK  smile 

И все же можно выше приведенное регулярное выражение заставить корректно работать одновременно для rus, en и uk шрифтов?  smile  
--------------------
### JAVA  ######  programming ###
PM MAIL WWW ICQ Skype   Вверх
enoff
Дата 24.9.2010, 20:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 30.6.2010
Где: Санкт-Петербург

Репутация: 11
Всего: 13



cp1251 содержит символы украинского алфавита, насколько я знаю...

Добавлено через 15 секунд
А так же русского и английского
PM MAIL ICQ Skype GTalk   Вверх
Pitbul
  Дата 24.9.2010, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Fruzenshtein
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 30.4.2008
Где: Киев

Репутация: нет
Всего: нет



enoff

т.е. Вы предлагаете использовать charset=cp1251 и в таком случае перед регуляркой даже не надо будет прописывать ЛОКАЛЬ? smile

Добавлено через 3 минуты и 5 секунд
Сделал проверку для charset=cp1251

Все работает в норме даже, когда я не прописываю ЛОКАЛЬ. Но только стоит использовать украинскую букву i как тут же ее относит к запрещенным символам smile 
--------------------
### JAVA  ######  programming ###
PM MAIL WWW ICQ Skype   Вверх
enoff
Дата 24.9.2010, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 30.6.2010
Где: Санкт-Петербург

Репутация: 11
Всего: 13



Pitbul, не знаю, что посоветовать...
разве что перейти на utf8.
PM MAIL ICQ Skype GTalk   Вверх
gta4kv
Дата 24.9.2010, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Перейти на юникод?
PM MAIL   Вверх
Pitbul
Дата 24.9.2010, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Fruzenshtein
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 30.4.2008
Где: Киев

Репутация: нет
Всего: нет



enoff

Переход на UTF-8 не убрал проблемы, но пока использую именно cp1251 т.к. она не требует прописывания ЛОКАЛИ, как в случае с windows-1251
 smile 
А вот вопрос с Украинским языком остается открытым, ведь на будущее надо знать, как с ним работать
--------------------
### JAVA  ######  programming ###
PM MAIL WWW ICQ Skype   Вверх
enoff
Дата 24.9.2010, 21:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 30.6.2010
Где: Санкт-Петербург

Репутация: 11
Всего: 13



gta4kv, использовать utf8 вместо windows-1251, так лучше? smile 

Pitbul, cp1251==windows-1251

Это сообщение отредактировал(а) enoff - 24.9.2010, 21:23
PM MAIL ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0573 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.