在Javascript字符串中检测俄文/西里尔字母?

17

我正在尝试检测一个字符串是否包含俄文(西里尔字母)字符。我正在使用以下代码:

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

但是它不起作用 - 实际上它只是原封不动地返回字符串。

有人可以帮忙提供正确的代码吗?

谢谢!


2
你在正则表达式中包含了\w,因此它也可以匹配拉丁字符的单词。 - Pointy
2个回答

41

使用模式/[\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'));


1
完美的答案!此格式中可以找到更多的字符范围:http://kourge.net/projects/regexp-unicode-block。 - hyperknot
1
@hyperknot 这个链接不再可用。 - emvaized
1
@emvaized,我无法更新我的评论,但这里是来自Archive.org的链接: https://web.archive.org/web/20200118100606/http://kourge.net/projects/regexp-unicode-block - hyperknot
没有空格或标点符号是有效的 - Nairi Areg Hatspanyan

22

也许你本意是要使用 RegExptest 方法?

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

请注意,JavaScript正则表达式并不真正支持Unicode,这意味着i标志对非ASCII字符没有任何影响。因此需要分别指定小写和大写字母范围。


3
你可能想要添加 Ёё,因为它们在俄语中也被使用。 - nhahtdh
西里尔字母的Unicode范围不起作用,但另一种方法非常好。 - Aerodynamika
这个答案意味着你必须将你的.js文件存储为Unicode编码。嗯。 - Cymro
@cymro,或者在正则表达式中使用Unicode转义。但是将文本文件存储和传输为UTF-8现在应该成为默认设置。我们已经不再处于70年代了。 - Joey
Joey,感谢您的评论。将js文件存储为UTF-8通常会在开头添加不需要的BOM。 - Cymro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接