Используя JavaScript, чтобы проверить, содержит ли строка японские символы (включая иероглифы)

Как проверить, содержит ли данная строка один или несколько японских символов (состоящих из каны и/или кандзи)?

Я видел аналогичный вопрос: Как проверить, содержит ли переменная китайские/японские символы?, и я использовал решение, чтобы придумать следующее:

var containsJapanese = string.match(/[\u3400-\u9FBF]/);

Однако это дает много ложных срабатываний.

Я протестировал его, выполнив script итерацию содержимого всех веб-страниц - например, Facebook, переполнение стека и т.д. - и отметив divs, которые якобы содержат японский текст. В этих случаях большое количество фидов заканчивается ошибкой. Я также тестировал его на страницах, которые содержат японский текст, а японские дивы заканчиваются тем, что помечены правильно рядом со многими некорректно отмеченными div.

Ответы

Ответ 1

Проверьте, работает ли это или нет. Я нашел этот веб-сайт, который, кажется, перечисляет все символы в Юникоде, которые могут быть использованы в японском тексте.

Соответствующее регулярное выражение (для одиночного символа) будет:

/[\u3000-\u303f\u3040-\u309f\u30a0-\u30ff\uff00-\uff9f\u4e00-\u9faf\u3400-\u4dbf]/
  -------------_____________-------------_____________-------------_____________
   Punctuation   Hiragana     Katakana    Full-width       CJK      CJK Ext. A
                                            Roman/      (Common &      (Rare)    
                                          Half-width    Uncommon)
                                           Katakana

Диапазоны (как указано на сайте):

  • 3000 - 303f: пунктуация в японском стиле
  • 3040 - 309f: Хирагана
  • 30a0 - 30ff: Катакана
  • ff00 - ff9f: Полноразмерные римские символы и полуширина Катакана
  • 4e00 - 9faf: унифицированные идеограммы CJK - общий и необычный кандзи
  • 3400 - 4dbf: унифицированные идеограммы CJK Расширение A - редкое кандзи

Я немного изменил диапазоны:

  • Я изменил с ff00 - ffef на ff00 - ff9f для полноразмерных римских символов и полуширины Katakana. Кодовые точки из ffa0 - ffdc содержат символы полуширины Hangul, которые не то, что вы хотите. Возможно, вы захотите повторно добавить кодовые точки из ffe0 - ffef, но в основном это полутоны или символы полной ширины валюты.

Вы можете проверить сайт и снять любой диапазон, который вам не нужен, или убедиться, что он не появится на вашем входе.

Ответ 2

Используйте функцию charCode для обнаружения японского языка. Например, (с веб-сайта http://www.jpf.go.jp/j/index.html)

 var a=$('a[href$="culture/new/index.html"]').text();
  a=a+'K';
 for(i=0;i<3;i++){ //3 as i knew it was length 3. Please use string.length
    console.log(a.charCodeAt(i));
   //Detect the charCode here and use break on match
 }


 Output : 19968 35239 75