Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2010, 15:58   #1
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию Регулярные выражения PHP

Столкнулся с такой проблемой:
Функция ereg не хочет воспринимать кириллицу. Делаю так:
PHP код:
$mask="^[a-z|A-Z|а-я|А-Я|_|0-9|\-]+$";
if (!(
ereg($mask$login$regs)) || !(ereg($mask$password$regs))) 
 die(
"<center>В Вашем нике или пароле есть запрещенные знаки.</center>"); 
ereg в данном случае не пропускает ники написанные кириллицой, хотя должен. Кто-нибудь сталкивался с такой проблемой?
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 11.04.2010, 16:08   #2
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

А кодировка не юникод?
Somebody вне форума Ответить с цитированием
Старый 11.04.2010, 16:09   #3
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Да, юникод и поменять не имею возможности.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 11.04.2010, 16:18   #4
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

ereg работает побайтово, а символы кириллицы в UTF-8 двухбайтовые.
Цитата:
Warning
This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.
Для многобайтовых кодировок есть mb_ ereg, для юникода в preg_match опция u.
Somebody вне форума Ответить с цитированием
Старый 11.04.2010, 16:35   #5
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Спасибо, наверное, надо хоть изредка читать документацию=)
Вот так заработало:
PHP код:
$mask="/^[a-z|а-я|_|0-9|\-]+$/ui";
if (!(
preg_match($mask$login$regs)) || !(preg_match($mask$password$regs))) 
 die(
"<center>В Вашем нике или пароле есть запрещенные знаки.</center>"); 
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 11.04.2010, 17:32   #6
Vertexxx
Заблокирован
 
Регистрация: 10.04.2010
Сообщений: 145
По умолчанию

а шаблон
Код:
/^[a-z|а-я|_|0-9|\-]+$/ui
переделать в
Код:
/^[\w\_-]+$/ui
нельзя?

Последний раз редактировалось Vertexxx; 11.04.2010 в 17:34.
Vertexxx вне форума Ответить с цитированием
Старый 11.04.2010, 17:36   #7
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Наверное, можно. Я как-то не особо с регулярными выражениями разбирался. Мне, в принципе, и так нравится, но всё равно спасибо.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 11.04.2010, 17:39   #8
Vertexxx
Заблокирован
 
Регистрация: 10.04.2010
Сообщений: 145
По умолчанию

да незачто. Просто регулярные выражения - это еще та тема. И когда записей наберется за десятки тысяч, станет ясно, что один вариант работает быстрее другого, так как в нём нет нужды каждый раз возвращаться и проверять сравнение. Он знает, что нужен любой алфавитно-цифровой симво, а какой - не важно.

А можно еще проще. Вам известны запрещенные символы, которые вы не хотите использовать? Если да тогда можно воспользоваться
Код:
/[^...]/iu
Вместо точек смело вставляете запрещенные вами символы

Последний раз редактировалось Vertexxx; 11.04.2010 в 17:46.
Vertexxx вне форума Ответить с цитированием
Старый 11.04.2010, 17:46   #9
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Ага, читал про это, но запрещать мне надо очень много символов, так что проще перечислить то, что разрешено.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регулярные выражения. (PHP) slavec PHP 1 10.03.2010 20:59
Регулярные выражения Marsik Помощь студентам 4 14.11.2009 14:13
Регулярные выражения AnalogXP Общие вопросы Delphi 0 01.08.2009 23:12
регулярные выражения wyvern PHP 3 09.04.2009 22:15
Регулярные выражения Adamant Общие вопросы C/C++ 1 26.11.2007 19:44