【发布时间】:2014-11-10 15:03:29
【问题描述】:
我正在尝试检测字符串是否包含俄语(西里尔文)字符。我正在使用此代码:
term.match(/[\wа-я]+/ig);
但它不起作用 - 或者实际上它只是按原样返回字符串。
有人可以帮助编写正确的代码吗?
谢谢!
【问题讨论】:
-
您在正则表达式中包含
\w,因此它也会匹配带有拉丁字符的单词。
标签: javascript regex encoding cyrillic
我正在尝试检测字符串是否包含俄语(西里尔文)字符。我正在使用此代码:
term.match(/[\wа-я]+/ig);
但它不起作用 - 或者实际上它只是按原样返回字符串。
有人可以帮助编写正确的代码吗?
谢谢!
【问题讨论】:
\w,因此它也会匹配带有拉丁字符的单词。
标签: javascript regex encoding cyrillic
使用模式/[\u0400-\u04FF]/ 覆盖更多的西里尔字符:
// http://jrgraphix.net/r/Unicode/0400-04FF
const cyrillicPattern = /^[\u0400-\u04FF]+$/;
console.log('Привіт:', cyrillicPattern.test('Привіт'));
console.log('Hello:', cyrillicPattern.test('Hello'));
更新:
在some new browsers,你可以使用Unicode property escapes。
西里尔字母uses与上述范围相同:U+0400..U+04FF
const cyrillicPattern = /^\p{Script=Cyrillic}+$/u;
console.log('Привіт:', cyrillicPattern.test('Привіт'));
console.log('Hello:', cyrillicPattern.test('Hello'));
【讨论】:
也许您打算改用RegExp test 方法?
/[а-яА-ЯЁё]/.test(term)
请注意,JavaScript 正则表达式并不是真正的 Unicode 感知,这意味着 i 标志不会影响任何非 ASCII 的内容。因此需要分别拼出小写和大写范围。
【讨论】:
Ёё,因为它们也用于俄语。