Страница 1 из 1

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

Добавлено: 2009.09.30, 12:45
sha
Проблема: паттерн из урока по созданию блога ругается на русские тэги.

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

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


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

Помогите, пожалуйста.

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

Добавлено: 2009.09.30, 13:37
sha
Вставляю первое выражение, всё равно не пашет(

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

            array('tags', 'match', 'pattern'=>'/^[A-Za-zА-Яа-я0-9ё_\s,]+$/',
                'message'=>'В тегах можно использовать только буквы.'), 

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

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

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

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

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

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

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

Добавлено: 2009.09.30, 15:00
Dreammaker
хм, а разве такой паттерн не работает ~^[a-zа-я ,]$~iu ? Ну и там можно добавить ё, и другие символы.

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

Добавлено: 2009.09.30, 15:07
samdark
Будет работать, но это довольно специфично получается. Например, нельзя будет приписать тег «Nürnberg».

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

Добавлено: 2009.09.30, 15:50
sha

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

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

Спсибо!

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

Добавлено: 2009.10.21, 00:29
Vadim
Диапазон кириллицы в Юникоде - /[\x{0400}-\x{04FF}]+/ui

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

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

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

Так понимаю это какой то обход этого ограничения...

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

Добавлено: 2009.10.27, 19:57
samdark

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

Добавлено: 2012.08.21, 02:48
greatdane
Помогите, пожалуйста, с обратной задачей — разрешить всё (в том числе умляуты) в Unicode, разрешить пробелы, переводы строк, знаки препинания — и запретить ТОЛЬКО кириллицу. Это чтоб в поля для английской версии сайта кириллицу не писали...

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

Добавлено: 2013.10.06, 00:38
Joseph Jevelin
Обратил внимание, если у нас включена AJAX-валидация, то символы Юникода её не проходят.

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

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

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

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

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

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

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

Если пишу:

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

привет, мир
не работает.

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

Добавлено: 2014.12.20, 00:58
samdark
Ну естественно. Запятой-то в регулярке нет.

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

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

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

~^(\p{L}|\p{Zs}|,)+$~u

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

Добавлено: 2015.01.21, 16:56
Bezlepkin
А как разрешить по одному пробелу?

'~^(\p{L}|\p{Zs}|\p{S})+$~u'

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

Добавлено: 2015.01.21, 20:07
samdark
Что значит по одному?

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

Добавлено: 2015.01.21, 20:10
Bezlepkin
Ну например вводит человек имя, Абул бабул. Чтоб так можно было, а Абул Бабух буди - нельзя

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

Добавлено: 2015.01.21, 23:58
samdark
Это проще отдельно проверять через substr_count.

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

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

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

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

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