preg_match не работает должным образом

0

Я использую такой шаблон для поиска кириллических символов в моем тексте, но он возвращает true в символах валюты Юникода "₴" (украинский гривня) и "€" (евро)

$pat = '/.*[А-Яа-яёЁ].*/';
$res = preg_match($pat, $str);

В чем проблема?

  • 0
    Не зная слишком много о порядке Unicode, возможно ли, что значения символов валюты Unicode существуют между А-Я или между А-Я? Это кажется маловероятным, но стоит посмотреть?
Теги:
preg-match
cyrillic

1 ответ

2
Лучший ответ

Вы должны сделать свой код unicode-aware с /u модификатором:

$pat = '/.*[А-Яа-яёЁ].*/u';
$res = preg_match($pat, $str);

Цитирование документа:

u (PCRE_UTF8)

Этот модификатор включает дополнительные функции PCRE, которые несовместимы с Perl. Строка и предметные строки рассматриваются как UTF-8.

Демо. Кстати, если вы только проверяете, присутствуют ли в строке кириллические буквы, не делая ничего в матче (и с данным кодом вы делаете), вы можете отказаться .* Части из вашего шаблона.

  • 0
    Спасибо. Все работает сейчас, как и ожидалось.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню