【问题标题】:Regex for confirming acceptable input用于确认可接受输入的正则表达式
【发布时间】:2017-08-29 11:26:53
【问题描述】:

我在 KeyEvent.KEY_TYPED 上执行输入检查,在此期间我通过以下方式获取全文:

text = text + event.getCharacter();

但我需要确保只添加用户可以输入的可接受字符,包括所有数字、字母和特殊字符。应用程序已经支持英语、爱沙尼亚语和俄语,未来还会添加更多。什么样的regex应该排除EscBackspace等?

【问题讨论】:

  • 你想允许任何不是控制字符的字符吗?使用"\\P{Cc}" 匹配此类字符(或"\\P{Cntrl}")。
  • 谢谢 Wiktor,这正是我想要的。也许您可以将其发布为答案,以便我将其标记为正确?
  • 好的,我作为答案发布了。

标签: java regex


【解决方案1】:

要匹配控制字符以外的任何字符,您可以使用

"\\P{Cc}"

"\\P{Cntrl}"

【讨论】:

    【解决方案2】:

    KEY_TYPED 仅与视觉上显示为输入的键有关(因此键 typed)。要采取行动(和禁止)按下控制键(例如退格),您应该查看其他事件,例如 keyPressed 和 keyReleased。他们还会收到有关控制字符的通知。

    来自KeyEvent javadoc

    “键类型”事件是更高级别的,通常不依赖于 平台或键盘布局。它们是在 Unicode 时生成的 字符被输入,并且是查找的首选方式 字符输入。在最简单的情况下,会产生一个键类型事件 通过单次按键(例如,“a”)。然而,字符通常是 由一系列按键(例如,'shift' + 'a')产生,并且 从按键事件到按键类型事件的映射可能是多对一的 或多对多。通常不需要密钥发布来生成 键类型事件,但在某些情况下键类型事件是 直到释放一个键才生成(例如,输入 ASCII 序列 通过 Windows 中的 Alt-Numpad 方法)。 没有关键类型的事件 为不生成 Unicode 字符的键生成(例如, 操作键、修饰键等)。

    但是,从用户的角度来看,例如禁止退格确实有问题。如果您想走这条路,请注意您已经考虑了所有相关的使用场景。由于 keytyped 事件没有得到任何控制字符,也许它已经在做你想做的事了。

    【讨论】:

      猜你喜欢
      • 2015-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 2019-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多