Определить русский/кириллицу в строке Javascript?

Я пытаюсь определить, содержит ли строка русские (кириллицу) символы или нет. Я использую этот код:

term.match(/[\wа-я]+/ig);

но это не работает — или на самом деле просто возвращает строку как есть.

Может кто-нибудь помочь с правильным кодом?

Спасибо!


person Aerodynamika    schedule 10.11.2014    source источник
comment
Вы включаете \w в регулярное выражение, поэтому оно также соответствует словам с латинскими символами.   -  person Pointy    schedule 10.11.2014


Ответы (2)


Возможно, вы хотели вместо этого использовать метод RegExp test?

/[а-яА-ЯЁё]/.test(term)

Обратите внимание, что регулярные выражения JavaScript на самом деле не поддерживают Unicode, а это означает, что флаг i не повлияет ни на что, кроме ASCII. Следовательно, необходимо указывать диапазоны нижнего и верхнего регистра отдельно.

person Joey    schedule 10.11.2014
comment
Вы можете добавить Ёё, так как они также используются в русском языке. - person nhahtdh; 10.11.2014
comment
кириллический диапазон юникода не работает, но другой метод отлично работает - person Aerodynamika; 10.11.2014
comment
Этот ответ означает, что вы должны хранить файлы .js как unicode. Хм. - person Cymro; 23.04.2019
comment
@cymro или используйте экранирование Unicode в регулярном выражении. Но хранение и передача текстовых файлов в формате UTF-8 в настоящее время действительно должны быть по умолчанию. Мы уже не в 70-х. - person Joey; 24.04.2019
comment
Джоуи, спасибо за ваш комментарий. Хранение js-файлов в кодировке UTF-8 часто добавляет нежелательную спецификацию в начале. - person Cymro; 08.05.2019

Используйте шаблон /[\u0400-\u04FF]/, чтобы охватить больше кириллических символов:

// http://jrgraphix.net/r/Unicode/0400-04FF
const cyrillicPattern = /^[\u0400-\u04FF]+$/;

console.log('Привіт:', cyrillicPattern.test('Привіт'));
console.log('Hello:', cyrillicPattern.test('Hello'));

ОБНОВИТЬ:

В некоторых новых браузерах вы можете использовать экранирование свойства Unicode.

Кириллица использует тот же диапазон как описано выше: U+0400..U+04FF

const cyrillicPattern = /^\p{Script=Cyrillic}+$/u;

console.log('Привіт:', cyrillicPattern.test('Привіт'));
console.log('Hello:', cyrillicPattern.test('Hello'));

person Bohdan Lyzanets    schedule 09.11.2016
comment
Идеальный ответ! Дополнительные диапазоны символов в этом формате можно найти здесь: kourge.net/projects/regexp-unicode-block - person hyperknot; 11.03.2019
comment
@hyperknot Ссылка больше недоступна - person emvaized; 14.05.2021
comment
@emvaized Я не могу обновить свой комментарий, но вот ссылка с Archive.org: https://web.archive.org/web/20200118100606/http://kourge.net/projects/regexp-unicode-блокировать - person hyperknot; 15.05.2021