Мое приложение полагалось на эту функцию, чтобы проверить, является ли строка корейской или нет:
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
если вход содержит только корейские символы?
Вот диапазон Unicode, который вам нужен для Hangul (взята со страницы 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);