我需要指定一个正则表达式来验证用户输入,允许用户在 Windows 桌面操作系统或 Mac OS/X 桌面操作系统上输入连字符或撇号字符。
用户可能已经配置了以下语言:
- 英语
- 法语
- 西类牙语
- 葡萄牙语
- 夏威夷语
我不明白如果我对连字符和撇号使用标准的 ASCII 正则表达式(例如 ['-]
)是否会捕获用户键入的连字符或撇号键 在大多数情况下。我很欣赏我的定义非常宽松,因为有许多不同的键盘布局、操作系统版本和语言定义(例如 fr_FR、ca_FR)。
我检查了以下资源并在谷歌上进行了一般搜索,但找不到任何特别说明 hyphen key 或 apostrophe key 生成的 ASCII 代码将始终分别为 ASCII 码 45 和 ASCII 码 39。
- http://en.wikipedia.org/wiki/Keyboard_layout
- http://en.wikipedia.org/wiki/Hyphen
- http://en.wikipedia.org/wiki/Apostrophe
注意:如果您觉得这个问题措辞不当,请添加评论以帮助我改进它。
最佳答案
你混淆了一些东西:
- keyboard layout 决定将什么值分配给扫描码。
- localization settings 确定您应该用什么语言来称呼用户,以及用户希望使用小数点还是逗号。
- character encoding 是怎样一个glyph被编码到位内存中,反过来,如何将位解码为字形
如果您要验证用户输入,您不应该对扫描码感兴趣。 QWERTY 键盘上的 DVORAK 布局用户将按 Q 键输入 '
。你不应该搞砸它。所以您没有业务处理键盘布局。
这个键盘的存在,应该提醒你,按键的作用不是你的头疼,而是用户的事。
本地化设置将对您很重要,但对您的正则表达式不是。但是,如果用户输入无效,他们会告诉您应该使用哪种语言输入错误消息。不错coding practice是使用像 gettext 这样的库来管理它。
最重要的是,当您验证输入时。只是这两件事:什么是有效,什么是输入。
您(或您的领域专家)决定什么是有效的。连字符减号是否与连字符或正破折号一样可接受。
输入将被编码;计算机使用位,而不是字形字符串。它可能是 ASCII,但如果可以的话,我会转向 unicode。
至于您真正关心的问题,如果我可以换个说法:“所有用户都可以轻松输入 '
和 -
吗?”。我想他们可能会。许多重要的编程语言使用这些字形来响应。表示字符串和作为减法运算符。如果您的应用程序需要(禁止)允许某些字形,您可以 put unicode code points or categories in your regex .
关于regex - 连字符和撇号字符 - 不同语言的相同 ASCII 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22580407/