ti-enxame.com

Usando JavaScript para verificar se uma sequência contém caracteres japoneses (incluindo kanji)

Como posso verificar se uma determinada sequência contém um ou mais caracteres japoneses (consistindo em kana e/ou kanji)?

Vi uma pergunta semelhante aqui: Como posso verificar se a variável contém caracteres chinês/japonês? e usei a solução para criar isso:

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

No entanto, isso fornece muitos falsos positivos.

Testei-o com a iteração de um script no conteúdo de páginas da Web inteiras - como Facebook, Stack Overflow, etc. - e marcando as divs que supostamente contêm texto em japonês. Nesses casos, um grande número de divs acaba sendo marcado por engano. Também testei em páginas que contêm texto em japonês, e os divs japoneses acabam sendo marcados corretamente, juntamente com muitos divs marcados incorretamente.

24
Josh1billion

Verifique se isso funciona ou não. Encontrei este site que parece listar todos os caracteres em Unicode que podem ser usados ​​em texto em japonês.

O regex correspondente (para caractere único) seria:

/[\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

Os intervalos são (conforme citados no site):

  • 3000 - 303f: Pontuação no estilo japonês
  • 3040 - 309f: Hiragana
  • 30a0 - 30ff: Katakana
  • ff00 - ff9f: Caracteres romanos de largura total e Katakana de meia largura
  • 4e00 - 9faf: Ideógrafos unificados CJK - Kanji comum e incomum
  • 3400 - 4dbf: Ideógrafos unificados por CJK Extensão A - Kanji raro

Eu mudei os intervalos um pouco:

  • Eu mudei de ff00 - ffef para ff00 - ff9f para caracteres romanos de largura total e Katakana de meia largura . O código aponta de ffa0 - ffdc contém caracteres Hangul de meia largura, que não é o que você deseja. Você pode adicionar novamente os pontos de código de ffe0 - ffef, mas na maior parte são pontuações de meia largura ou símbolos de moeda de largura total.

Você pode verificar o site e retirar qualquer intervalo que não desejar, ou tem certeza de que ele não aparecerá na sua entrada.

52
nhahtdh

Use a função charCode para detectar o idioma japonês. Por exemplo, (do site 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
1
user1428716