27

如何检查给定字符串是否包含一个或多个日文字符(由假名和/或汉字组成)?

我在这里看到了一个类似的问题:如何检查变量是否包含中文/日文字符?,我使用了解决方案来提出这个:

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

但是,这会产生许多误报。

我已经通过让脚本遍历整个网页的内容(例如 Facebook、Stack Overflow 等)并标记应该包含日语文本的 div 来测试它。在这些情况下,大量的 div 最终会被错误地标记。我还在包含日文文本的页面上对其进行了测试,那里的日文 div 最终与许多错误标记的 div 一起被正确标记。

4

2 回答 2

69

检查这是否有效。我发现这个网站似乎列出了所有可能在日语文本中使用的 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: 中日韩统一表意文字 - 常见和不常见的汉字
  • 3400 - 4dbf: 中日韩统一表意文字扩展 A - 稀有汉字

我稍微改变了范围:

  • 对于全角罗马字符和半角片假名,我已经从 更改ff00 - ffef为。来自的代码点包含韩文半角字符,这不是您想要的。您可能想从 重新添加代码点,但它们大多是半角标点符号或全角货币符号。ff00 - ff9fffa0 - ffdcffe0 - ffef

您可以检查该站点并取消您不想要的任何范围,或者确保它不会出现在您的输入中。

于 2013-02-22T22:53:30.863 回答
0

使用 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
于 2013-02-22T21:54:21.037 回答