使用JavaScript测试输入是韩语还是中文的正确方法是什么?

问题描述 投票:0回答:3

我的应用程序依赖此函数来测试字符串是否是韩语:

const isKoreanWord = (input) => {
  const match = input.match(/[\u3131-\uD79D]/g);
  return match ? match.length === input.length : false;
}

isKoreanWord('만두'); // true
isKoreanWord('mandu'); // false

直到我开始包含中文支持,现在这个功能变得不连贯:

isKoreanWord('幹嘛'); // true

我认为这是由于韩文字符和中文字符混合在相同的 Unicode 范围内造成的。

如果输入仅包含韩文字符,我应该如何更正此函数以使其返回

true

javascript unicode chinese-locale
3个回答
16
投票

这里是 Hangul 所需的 unicode 范围(取自他们的 wikipedia 页面)。

U+AC00–U+D7AF
U+1100–U+11FF
U+3130–U+318F
U+A960–U+A97F
U+D7B0–U+D7FF

所以你的正则表达式

.match
应该看起来像这样:

const match = input.match(/[\uac00-\ud7af]|[\u1100-\u11ff]|[\u3130-\u318f]|[\ua960-\ua97f]|[\ud7b0-\ud7ff]/g);

1
投票

与韩文字符匹配的较短版本

const regexKorean = /[\u1100-\u11FF\u3130-\u318F\uA960-\uA97F\uAC00-\uD7AF\uD7B0-\uD7FF]/g

0
投票

现代浏览器中,您可以直接使用unicode字符类

const RE = /\p{sc=Hangul}/u

console.log(RE.test('만두')) // true
console.log(RE.test('mandu')) // false
console.log(RE.test('幹嘛')) // false

© www.soinside.com 2019 - 2024. All rights reserved.