日语检测全角字符

dav*_*1ua 5 javascript

我需要禁止在输入字段中写入全角日语字符,半角可以,除全角之外的任何其他符号都可以。

在这里https://gist.github.com/terrancesnyder/1345094 我找到了全角片假名(zenkaku ??)的正则表达式就够了吗?目前我的代码看起来像这样

if ( /[?-?]/.test("??") ) {
  console.log('full width');
}else{
  console.log('not full width');
}
Run Code Online (Sandbox Code Playgroud)

我不熟悉日语所以我不知道我还需要检查什么,我的意思是他们有片假名、平假名等等,这就是为什么我不确定我的剧本是否足够好,请告诉我你怎么看

mjy*_*mjy 6

日语使用很多这种字符。
\ne.g.

\n\n
    \n
  • \xe3\x81\xb2\xe3\x82\x89\xe3\x81\x8c\xe3\x81\xaa(平假名): \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81 \x88\xe3\x81\x8a
  • \n
  • \xe3\x82\xab\xe3\x82\xbf\xe3\x82\xab\xe3\x83\x8a(片假名):\xe3\x82\xa2\xe3\x82\xa4\xe3\x82\xa6\xe3\x82 \xa8\xe3\x82\xaa
  • \n
  • \xe5\x8d\x8a\xe8\xa7\x92\xe3\x82\xab\xe3\x82\xbf\xe3\x82\xab\xe3\x83\x8a(半角片假名):\xef\xbd\xb1\ xef\xbd\xb2\xef\xbd\xb3\xef\xbd\xb4\xef\xbd\xb5
  • \n
  • \xe6\xbc\xa2\xe5\xad\x97(汉字): \xe5\xae\x89\xe4\xbb\xa5\xe5\xae\x87\xe8\xa1\xa3\xe6\x96\xbc
  • \n
  • \xe5\x85\xa8\xe8\xa7\x92\xe6\x95\xb0\xe5\xad\x97(全角数字):\xef\xbc\x91\xef\xbc\x92\xef\xbc\x93\ xef\xbc\x94\xef\xbc\x95
  • \n
  • \xe5\x85\xa8\xe8\xa7\x92\xe3\x82\xa2\xe3\x83\xab\xe3\x83\x95\xe3\x82\xa1\xe3\x83\x99\xe3\x83\x83\xe3 \x83\x88(全角字母):\xef\xbc\xa1\xef\xbc\xa2\xef\xbc\xa3\xef\xbc\xa4\xef\xbc\xa5
  • \n
  • \xe8\xa8\x98\xe5\x8f\xb7(符号):\xe2\x97\x8b\xe2\x96\xb3\xe2\x96\xa1\xe3\x80\x9c\xe2\x98\x86\xe2\x89 \xa0\xe2\x89\xa7
  • \n
\n\n

使用简单的正则表达式无法检测到它。\n其他亚洲语言中也存在字符宽度的变化。\n在 Unicode 中,它被定义为“东亚宽度”

\n\n

Unicodedata module of python通常用于确定“东亚宽度”。\nJavaScript 的标准函数中不存在类似的东西。

\n\n

但是,有一些npm 模块。\n如果你使用这个East Asian Width模块可以这样确定。

\n\n
var eaw = require(\'eastasianwidth\');\nfunction isHalfWidth(c){ return eaw.length(c) == 1; }\n\nisHalfWidth("\xe3\x81\x82")\n// -> false\nisHalfWidth("\xef\xbd\xb1")\n// -> true\nisHalfWidth("\xef\xbc\xa1")\n// -> false\nisHalfWidth("A")\n/// -> true\n
Run Code Online (Sandbox Code Playgroud)\n