验证假名输入

时间:2008-12-23 07:23:30

标签: validation language-agnostic unicode cjk

我正在开发一个允许用户输入日语字符的应用程序。我试图想出一种方法来确定用户的输入是否是日本假名(平假名,片假名或汉字)。

在应用程序中有些字段输入拉丁文本是不合适的,我需要一种方法将某些字段限制为仅限汉字,或仅使用片假名等。

该项目使用UTF-8编码。我不希望接受JIS或Shift-JIS输入。

想法?

3 个答案:

答案 0 :(得分:6)

不确定答案是否正确,但维基百科上列出的katakanahiragana的Unicode范围。 (我期望的也可以从unicode.org获得。)

  • 平假名:Unicode:3040-309F
  • 片假名:Unicode:30A0-30FF

根据输入检查这些范围应该以语言无关的方式验证Unicode的平假名或片假名。

对于汉字,我希望它会像我一样复杂一点 我希望中文和日文中使用的汉字都包含在同一范围内,但话说回来,我可能错了。 (我不能指望将简体中文和繁体中文包含在同一范围内......)

答案 1 :(得分:6)

听起来你基本上只需检查每个Unicode字符是否在特定范围内。 Unicode code charts应该是一个很好的起点。

如果你正在使用.NET,我的MiscUtil库有一些Unicode范围支持 - 它是原始的,但它应该可以完成这项工作。我现在没有动手来源,但如果有帮助,我会稍后用一个例子来更新这篇文章。

答案 2 :(得分:2)

哦,哦!我曾经有过这个...我有平假名的正则表达式,然后是片假名,然后是汉字。我忘记了确切的代码,我会去看看。

正则表达式非常棒,因为你将问题加倍。我在PHP中做到了,我选择了更强大的自动生成问题

- 编辑 -

$pattern = '/[^\wぁ-ゔァ-ヺー\x{4E00}-\x{9FAF}_\-]+/u';

我找到了这个here,但它并不好......我会继续寻找

- edit-- 我查看了我的便携式硬盘....我以为我保留了最后一家公司的特定片段...抱歉。