27

指定された文字列に 1 つ以上の日本語の文字 (かなおよび/または漢字で構成される) が含まれているかどうかを確認するにはどうすればよいですか?

ここで同様の質問を見ました:変数に中国語/日本語の文字が含まれているかどうかを確認するにはどうすればよいですか? 、そして私はこれを思い付くために解決策を使用しました:

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

ただし、これにより多くの誤検知が発生します。

Facebook、Stack Overflow などの Web ページ全体のコンテンツを反復処理するスクリプトを作成し、日本語のテキストを含むと思われる div をマークすることでテストしました。そのような場合、多数の div が誤ってマークされてしまいます。また、日本語のテキストを含むページでもテストしましたが日本語の div は、誤ってマークされた多くの div と一緒に正しくマークされてしまいます。

4

2 に答える 2

69

これが機能するかどうかを確認します。日本語のテキストで使用される可能性のある Unicode のすべての文字をリストしているように見えるこの Web サイトを見つけました。

対応する正規表現 (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 - ff9fffa0 - ffdcffe0 - ffef

サイトをチェックして、不要な範囲を削除するか、入力に表示されないことを確認してください。

于 2013-02-22T22:53:30.863 に答える
0

charCode関数を使用して日本語を検出します。たとえば、(Webサイト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
于 2013-02-22T21:54:21.037 に答える