使用JavaScript检查字符串是否包含日语字符(包括汉字)

34
我该如何检查一个字符串中是否包含一个或多个日文字符(包括假名和/或汉字)?
我在这里看到了一个类似的问题:如何检查变量是否包含中文/日文字符?,并使用该解决方案得出了以下结果:
var containsJapanese = string.match(/[\u3400-\u9FBF]/);

然而,这会产生许多误报。
我通过编写一个脚本迭代整个网页的内容进行测试——如Facebook、Stack Overflow等——并标记那些据称包含日语文本的div。在这些情况下,许多div会因错误而被标记。我还在包含日语文本的页面上进行了测试,那里的日语div会正确标记,但也有很多错误标记的div。

string.match 只提供字符串比较,而不是 UTF 比较。 - user1428716
@user1428716:这是正则表达式放在里面,因此它将检测范围内的字符。然而,它是否是正确的日语另说… - nhahtdh
3个回答

82

请检查这是否有效。我发现这个网站,它似乎列出了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”包含半角韩文字母,这并不是您想要的。您可能需要重新添加代码点“ffe0 - ffef”,但它们大多是半角标点符号或全角货币符号。
你可以检查该网站并删除任何你不想要的范围,或者确信它不会出现在你的输入中。

-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

谢谢您的回复,但是您能具体说明要与哪些字符编码值进行比较吗? - Josh1billion
这个链接(http://www.rikai.com/library/kanjitables/kanji_codes.unicode.shtml)提供了HEX格式的UNICODE编码 - 你需要查找对应的DECIMAL值。可以使用:http://www.binaryhexconverter.com/hex-to-decimal-converter - user1428716

-2

检查平假名全尺寸 /^[ぁ-ん]+$/


1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接