【问题标题】:Detect Russian / cyrillic in Javascript string?检测 Javascript 字符串中的俄语/西里尔字母?
【发布时间】:2014-11-10 15:03:29
【问题描述】:

我正在尝试检测字符串是否包含俄语(西里尔文)字符。我正在使用此代码:

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

但它不起作用 - 或者实际上它只是按原样返回字符串。

有人可以帮助编写正确的代码吗?

谢谢!

【问题讨论】:

  • 您在正则表达式中包含\w,因此它也会匹配带有拉丁字符的单词。

标签: javascript regex encoding cyrillic


【解决方案1】:

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

【讨论】:

【解决方案2】:

也许您打算改用RegExp test 方法?

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

请注意,JavaScript 正则表达式并不是真正的 Unicode 感知,这意味着 i 标志不会影响任何非 ASCII 的内容。因此需要分别拼出小写和大写范围。

【讨论】:

  • 您可能需要添加Ёё,因为它们也用于俄语。
  • 西里尔 unicode 范围不起作用,但另一种方法效果很好
  • 这个答案意味着您必须将 .js 文件存储为 unicode。嗯。
  • @cymro,或在正则表达式中使用 Unicode 转义。但是现在以 UTF-8 存储和传输文本文件确实应该是默认设置。我们已经不是 70 年代了。
  • 乔伊,感谢您的评论。将 js 文件存储为 UTF-8 通常会在开头添加不需要的 BOM。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-14
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
  • 2017-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多