Регулярное выражения для РУССКИХ тэгов

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
sha
Сообщения: 17
Зарегистрирован: 2009.09.23, 16:17
Откуда: Волгоград
Контактная информация:

Регулярное выражения для РУССКИХ тэгов

Сообщение sha »

Проблема: паттерн из урока по созданию блога ругается на русские тэги.

Код: Выделить всё

        array('tags', 'match', 'pattern'=>'/^[\w\s,]+$/',
            'message'=>'В тегах можно использовать только буквы.'),
 
http://www.yiiframework.com/demos/blog/ — здесь тоже ругается на русские буквы


Мучаюсь. Не могу подобрать подходящий паттерн... Вроде вся проблема в «\w». Он вообще тупо игнорит русские буквы(

Помогите, пожалуйста.
sha
Сообщения: 17
Зарегистрирован: 2009.09.23, 16:17
Откуда: Волгоград
Контактная информация:

Re: Регулярное выражения для РУССКИХ тэгов

Сообщение sha »

Вставляю первое выражение, всё равно не пашет(

Код: Выделить всё

            array('tags', 'match', 'pattern'=>'/^[A-Za-zА-Яа-я0-9ё_\s,]+$/',
                'message'=>'В тегах можно использовать только буквы.'), 
Аватара пользователя
Caveman
Сообщения: 152
Зарегистрирован: 2009.04.04, 20:56
Откуда: Москва
Контактная информация:

Re: Регулярное выражения для РУССКИХ тэгов

Сообщение Caveman »

/^[A-Za-zАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯабвгдеёжзийклмнопрстуфхцчшщьыъэюя0-9\s,]+$/
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Регулярное выражения для РУССКИХ тэгов

Сообщение samdark »

Раз мы работаем с Unicode, то и группы символов надо использовать Unicode-ные:

Код: Выделить всё

  array('tags', 'match', 'pattern'=>'~^(\p{L}|\p{Zs})+$~u',
            'message'=>'В тегах можно использовать только буквы и пробелы'),
 
Dreammaker
Сообщения: 139
Зарегистрирован: 2009.09.02, 16:21
Откуда: Черкассы, Украина

Re: Регулярное выражения для РУССКИХ тэгов

Сообщение Dreammaker »

хм, а разве такой паттерн не работает ~^[a-zа-я ,]$~iu ? Ну и там можно добавить ё, и другие символы.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Регулярное выражения для РУССКИХ тэгов

Сообщение samdark »

Будет работать, но это довольно специфично получается. Например, нельзя будет приписать тег «Nürnberg».
sha
Сообщения: 17
Зарегистрирован: 2009.09.23, 16:17
Откуда: Волгоград
Контактная информация:

Re: Регулярное выражения для РУССКИХ тэгов

Сообщение sha »

Код: Выделить всё

~^(p{L}|p{Zs}|p{N}|,|-|_)+$~u
Модифицировал немного, теперь всё работает так как было задумано.

Спсибо!
Vadim
Сообщения: 9
Зарегистрирован: 2009.09.26, 13:42

Re: Регулярное выражения для РУССКИХ тэгов

Сообщение Vadim »

Диапазон кириллицы в Юникоде - /[\x{0400}-\x{04FF}]+/ui
Аватара пользователя
aser
Сообщения: 167
Зарегистрирован: 2009.04.02, 14:25
Откуда: Киев

Re: Регулярное выражения для РУССКИХ тэгов

Сообщение aser »

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

p.s.
И если не трудно ссылку откуда взят синтаксис. то что в мануале нашел:
Следующие служебные последовательности, используемые в Perl, не поддерживаются: \l, \u, \L, \U, \E, \Q. Это связано с тем, что обработка указанных последовательностей производится внутренним Perl-механизмом обработки строк и не является частью механизма регулярных выражений.

Так понимаю это какой то обход этого ограничения...
Аватара пользователя
greatdane
Сообщения: 408
Зарегистрирован: 2010.10.20, 14:05
Откуда: Электросталь
Контактная информация:

Re: Регулярное выражения для РУССКИХ тэгов

Сообщение greatdane »

Помогите, пожалуйста, с обратной задачей — разрешить всё (в том числе умляуты) в Unicode, разрешить пробелы, переводы строк, знаки препинания — и запретить ТОЛЬКО кириллицу. Это чтоб в поля для английской версии сайта кириллицу не писали...
Joseph Jevelin
Сообщения: 339
Зарегистрирован: 2012.01.06, 22:07

Re: Регулярное выражения для РУССКИХ тэгов

Сообщение Joseph Jevelin »

Обратил внимание, если у нас включена AJAX-валидация, то символы Юникода её не проходят.
Аватара пользователя
dignityinside
Сообщения: 76
Зарегистрирован: 2013.04.04, 17:57
Контактная информация:

Re: Регулярное выражения для РУССКИХ тэгов

Сообщение dignityinside »

Sam Dark писал(а):Раз мы работаем с Unicode, то и группы символов надо использовать Unicode-ные:

Код: Выделить всё

  array('tags', 'match', 'pattern'=>'~^(\p{L}|\p{Zs})+$~u',
            'message'=>'В тегах можно использовать только буквы и пробелы'),
Работает, но не получается указать несколько тегов через запятую.

То есть если пишу:

Код: Выделить всё

привет
работает.

Если пишу:

Код: Выделить всё

привет, мир
не работает.
Мой блог:
https://protonalex.com
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Регулярное выражения для РУССКИХ тэгов

Сообщение samdark »

Ну естественно. Запятой-то в регулярке нет.
Аватара пользователя
dignityinside
Сообщения: 76
Зарегистрирован: 2013.04.04, 17:57
Контактная информация:

Re: Регулярное выражения для РУССКИХ тэгов

Сообщение dignityinside »

Sam Dark писал(а):Ну естественно. Запятой-то в регулярке нет.
Спасибо, теперь работает:

Код: Выделить всё

~^(\p{L}|\p{Zs}|,)+$~u
Мой блог:
https://protonalex.com
Аватара пользователя
Bezlepkin
Сообщения: 731
Зарегистрирован: 2012.11.10, 18:59
Контактная информация:

Re: Регулярное выражения для РУССКИХ тэгов

Сообщение Bezlepkin »

А как разрешить по одному пробелу?

'~^(\p{L}|\p{Zs}|\p{S})+$~u'
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Регулярное выражения для РУССКИХ тэгов

Сообщение samdark »

Что значит по одному?
Аватара пользователя
Bezlepkin
Сообщения: 731
Зарегистрирован: 2012.11.10, 18:59
Контактная информация:

Re: Регулярное выражения для РУССКИХ тэгов

Сообщение Bezlepkin »

Ну например вводит человек имя, Абул бабул. Чтоб так можно было, а Абул Бабух буди - нельзя
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Регулярное выражения для РУССКИХ тэгов

Сообщение samdark »

Это проще отдельно проверять через substr_count.
Drugpunker
Сообщения: 187
Зарегистрирован: 2014.08.13, 19:44

Re: Регулярное выражения для РУССКИХ тэгов

Сообщение Drugpunker »

samdark писал(а): 2009.09.30, 14:55 Раз мы работаем с Unicode, то и группы символов надо использовать Unicode-ные:

Код: Выделить всё

  array('tags', 'match', 'pattern'=>'~^(\p{L}|\p{Zs})+$~u',
            'message'=>'В тегах можно использовать только буквы и пробелы'),
 
Добрый день.
Некропост конечно, но всё же.

Не получается сделать в Unicode "начинается с буквы
и содержит только буквенные символы, числовые символы и знак подчеркивания"
По числам нашёл только \p{N}
Но не знаю куда вставить.
Информации в нэте крайне мало.
Подскажите пжл, как сделать и что почитать.
Ответить