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

标签 regex windows macos internationalization keyboard

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

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

  1. 英语
  2. 法语
  3. 西类牙语
  4. 葡萄牙语
  5. 夏威夷语

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

我检查了以下资源并在谷歌上进行了一般搜索,但找不到任何特别说明 hyphen keyapostrophe key 生成的 ASCII 代码将始终分别为 ASCII 码 45 和 ASCII 码 39。


注意:如果您觉得这个问题措辞不当,请添加评论以帮助我改进它。

最佳答案

你混淆了一些东西:

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

blank key happy hacking keyboard

这个键盘的存在,应该提醒你,按键的作用不是你的头疼,而是用户的事。

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

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

您(或您的领域专家)决定什么是有效的。连字符减号是否与连字符或正破折号一样可接受。

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

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

关于regex - 连字符和撇号字符 - 不同语言的相同 ASCII 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22580407/

相关文章:

java - 在字符串中查找换行符 "\n"

java - 检测字符串中的不完整模式

c++ - 如何在Windows C++中像S-1-5-21-123697389-1196883430-1112475604-1016这样创建SID

windows - 使用 Windows 命令行在本地运行 jmeter .jmx 测试给出非法参数异常

c++ - 将 CARingBuffer 添加到项目中

ruby - 使用 regex + gsub 从字符串中删除方括号内的文本

regex - 正则表达式回车在 Google Docs 上查找和替换

windows - LocalDumps 注册表项停止工作(Windows 错误报告)

macos - 使用 zsh 在终端 OS X (10.8.5) 中进行 gdb 调试

macos - 为什么 zsh 中只有某些插件可以工作,而其他插件不能?