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

新手上路,请多包涵

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

我在这里看到一个类似的问题: How can I check if variable contains Chinese/Japanese characters? ,我用这个解决方案想出了这个:

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

然而,这会产生许多误报。

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

原文由 Josh1billion 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
1 个回答

检查这是否有效。我发现 这个网站 似乎列出了日文文本中可能使用的所有 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 unified ideographs Extension A - Rare Kanji

我稍微改变了范围:

  • 我已将 全角罗马字符和半角片假名ff00 - ffef 更改为 ff00 - ff9f 。来自 ffa0 - ffdc 的代码点包含 Hangul 半角字符,这不是您想要的。您可能想重新添加 ffe0 - ffef 中的代码点,但它们大多是半角标点符号或全角货币符号。

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

原文由 nhahtdh 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题