我正在开发一个允许用户输入日语字符的应用程序。我试图想出一种方法来确定用户的输入是否是日语假名(平假名、片假名或汉字)。
应用程序中的某些字段不适合输入拉丁文本,我需要一种方法将某些字段限制为仅限汉字或仅限片假名等。
该项目使用 UTF-8 编码。我不希望接受 JIS 或 Shift-JIS 输入。
想法?
我正在开发一个允许用户输入日语字符的应用程序。我试图想出一种方法来确定用户的输入是否是日语假名(平假名、片假名或汉字)。
应用程序中的某些字段不适合输入拉丁文本,我需要一种方法将某些字段限制为仅限汉字或仅限片假名等。
该项目使用 UTF-8 编码。我不希望接受 JIS 或 Shift-JIS 输入。
想法?
不确定一个完美的答案,但维基百科上列出了片假名和平假名的 Unicode 范围。(我希望也可以从unicode.org获得。)
根据输入检查这些范围应该以与语言无关的方式验证 Unicode 的平假名或片假名。
对于汉字,我希望它会稍微复杂一点,因为我希望中文和日文中使用的汉字都包含在同一个范围内,但话又说回来,我可能在这里错了。(我不能指望简体中文和繁体中文被包含在同一个范围内......)
听起来您基本上只需要检查每个 Unicode 字符是否在特定范围内。Unicode 代码图表应该是一个很好的起点。
如果您使用的是 .NET,我的MiscUtil库有一些 Unicode 范围支持——它是原始的,但它应该可以完成这项工作。我现在手头没有资源,但如果有帮助的话,稍后会用一个例子更新这篇文章。
哦哦!我曾经有过这个......我有一个带有平假名的正则表达式,然后是片假名,然后是汉字。具体代码我忘记了,我去看看。
正则表达式很棒,因为您将问题加倍。我是用 PHP 做的,我选择了更强大的自动问题生成
- 编辑 -
$pattern = '/[^\wぁ-ゔァ-ヺー\x{4E00}-\x{9FAF}_\-]+/u';
我在这里找到了这个,但它不是很好......我会继续寻找
--edit-- 我查看了我的便携式硬盘驱动器......我以为我保留了上一家公司的那个特定片段......对不起。