2013-02-22 92 views
14

如何檢查給定字符串是否包含一個或多個日文字符(由假名和/或漢字組成)?使用JavaScript檢查字符串是否包含日文字符(包括漢字)

我看到了類似的問題在這裏:How can I check if variable contains Chinese/Japanese characters?,我使用的解決方案,拿出這樣的:

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

然而,這給許多誤報。

我已經通過腳本遍歷整個網頁的內容(例如Facebook,Stack Overflow等)來測試它,並且標記了應該包含日文文本的div。在這些情況下,大量的div最終會被誤判。我也在包含日文文本的頁面上進行了測試,日文版的div最終會在許多標記不正確的div上正確標記。

+0

string.match只給出字符串比較而不是UTF比較 – user1428716 2013-02-22 21:58:13

+0

@ user1428716:這是正則表達式放在那裏,所以它會檢測範圍內的字符。但是,不管是否是正確的日語是另一回事...... – nhahtdh 2013-02-22 22:40:39

回答

29

檢查是否該工程或沒有。我發現this website似乎列出了可能在日文文本中使用的所有Unicode字符。

相應的正則表達式(用於單個字符)將是:

/[\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全角羅馬字符和半角片假名。來自ffa0 - ffdc的代碼點包含Hangul半角字符,這不是您想要的。您可能需要重新添加ffe0 - ffef中的代碼點,但它們大多是半角標點或全角貨幣符號。

您可以檢查網站並取消您不想要的任何範圍,或確定它不會出現在您的輸入中。

+0

它完美的作品。非常感謝! – Josh1billion 2013-02-22 23:02:59

1

使用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 
+0

感謝您的迴應,但是您可以更具體地瞭解哪些字符代碼值要進行比較? – Josh1billion 2013-02-22 21:58:01

+0

[此鏈接](http://www.rikai.com/library/kanjitables/kanji_codes.unicode.shtml)具有十六進制的UNICODE - 您必須檢查DECIMAL值。使用:http://www.binaryhexconverter.com/hex-to-decimal-converter – user1428716 2013-02-22 22:01:58

相關問題