Как правильно проверить, является ли ввод корейским или китайским с использованием JavaScript?

1

Мое приложение полагалось на эту функцию, чтобы проверить, является ли строка корейской или нет:

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 если вход содержит только корейские символы?

  • 0
    Под "корейскими иероглифами" ты подразумеваешь хангыль ? Потому что китайские иероглифы также используются в Корее. Попытка отличить «китайские иероглифы» от «корейских китайских иероглифов» - это все равно что просить отличить английский от французского.
  • 0
    @deceze Да, я имел в виду хангыль . Как отличить хангыль от ханджи .
Показать ещё 4 комментария
Теги:
unicode
chinese-locale

1 ответ

3
Лучший ответ

Вот диапазон 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);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню