5

Есть следующее регулярное выражение:

Regex regex = new Regex("^[А-Яа-я]+$");

Он работает правильно, но не "понимает" украинский язык. Т.е. он "скушает" "фывапролдж", а это нет - "іилрилії".

Как сделать так, чтобы эта регулярка "понимала" украинский язык?

2 Answers2

15

Вам необходимо дополнить символьный класс символами ёЁЇїІіЄєҐґ:

"^[А-Яа-яёЁЇїІіЄєҐґ]+$"

Это регулярное выражение для букв украинского языка (информацию я брал из Википедии):

[а-щА-ЩЬьЮюЯяЇїІіЄєҐґ]

Возможно, надо добавить сюда ' (см. комментарий Влада).

По поводу ёЁ: эти буквы в таблице Юникода находятся вне диапазона остальный букв, поэтому её надо указывать отдельно. Диапазон заглавных букв русского языка выглядит как U+0410 - U+042F, диапазон строчных - U+0430 - U+044F. Ё имеет код U+0401, а ёU+0451.

И ещё: в .NET можно указать все кириллические символы с помощью \p{IsCyrillic} (U+0400 - U+04FF) и, для полноты, \p{IsCyrillicSupplement} (U+0500 - 052F), и тогда выражение примет форму

@"^[\p{IsCyrillic}\p{IsCyrillicSupplement}]+$"

Ну, или @"^['\p{IsCyrillic}\p{IsCyrillicSupplement}]+$".

  • Возможно, имеет смысл добавить насчёт IsCyrillic в этот ответ. (Хотя там и про Java.) – VladD Aug 26 '15 at 07:43
  • Простите, заметил одну неточность, предоставленное вами регулярное выражение для украинского языка включает в себя букву русского алфавита: "ы". – Evgeniy Miroshnichenko Aug 17 '18 at 15:18
  • 1
    @EvgeniyMiroshnichenko [а-щА-ЩЬьЮюЯяЇїІіЄєҐґ] не находит ы. ^[А-Яа-яёЁЇїІіЄєҐґ]+$ - это регулярное выражение из вопроса, в которой добавлены украинские буквы, так как вопрос был сделать так, "чтобы эта регулярка (^[А-Яа-я]+$) "понимала" украинский язык". – Wiktor Stribiżew Aug 17 '18 at 15:29
6

Я бы рекомендовал такое выражене:

Regex regex = new Regex("^[\u0400-\u052F\u2DE0-\u2DFF\uA640-\uA69F']+$");

Это понимает все кириллические буквы в Юникоде, например такие буквы:

  • РусскийЫыЁёЭэЪъ
  • УкраїнськаІіЇїЄє'
  • БеларускаяЎў
  • СрпскиЂђЉљЊњЋћЏџ
  • СлавянскиеБуквыѰѱѬѭѨѩ

и так далее.

Если только хочешь украинские и русские буквы, вот это подходит:

new Regex("^[А-Яа-яЁёЇїІіЄєҐґ']+$");
Peter Olson
  • 10,462