连字符和撇号字符 - 不同语言的相同ASCII码?

时间:2014-03-22 16:37:12

标签: regex windows macos internationalization keyboard

我需要指定用于验证用户输入的正则表达式,允许用户在Windows桌面操作系统或Mac OS / X桌面操作系统上输入连字符或撇号字符。

用户可能已配置以下语言:

  1. 西班牙语
  2. 葡萄牙语
  3. 夏威夷
  4. 我不明白我是否使用标准ASCII正则表达式用于连字符和撇号(例如['-])是否会捕获用户在大多数情况下键入的连字符或撇号键。我很欣赏我的定义非常宽松,因为有许多不同的键盘布局,操作系统版本和语言定义(例如fr_FR,ca_FR)。

    我检查了以下资源,并且通常在谷歌搜索,但是没有找到任何关于说明连字符键撇号键生成的ASCII码的信息将始终分别为ASCII码45和ASCII码39。


    注意:如果您认为此问题措辞严厉,请添加评论以帮助我改进。

1 个答案:

答案 0 :(得分:1)

你混淆了几件事:

如果您正在验证用户输入,则不应对扫描码感兴趣。 QWERTY键盘上的DVORAK布局用户将按Q键输入'。你不应该搞砸了。所以你有没有业务处理键盘布局。

blank key happy hacking keyboard

这个键盘的存在应该提醒你,哪些键不是你的头痛,而是由用户决定。

本地化设置 对您很重要,但 对您的正则表达式无关紧要。但是,如果用户输入无效,他们会告诉您应该使用何种语言添加错误消息。一个好的coding practice是使用像gettext这样的库来管理它。

在验证输入时最重要的是什么。只有这两件事:什么是有效,什么是输入

您(或您的域名专家)决定什么是有效的。连字符减号与连字符或n-dash一样可接受。

输入将被编码;计算机使用位,而不是字形串。它可能是ASCII,但如果我能帮助它,我会转向unicode。

至于你真正关心的问题,如果我可以改写它:“所有用户都可以轻松输入'-吗?”。我想他们可能会。许多重要的编程语言都使用这些字形来表示。表示字符串并作为减法运算符。如果您的应用程序需要(dis)允许某些字形,您可以put unicode code points or categories in your regex