使用 RegEx 在键入时验证用户输入

Validating User Input While Typing using RegEx

我正在努力为以下标准编写正则表达式:

这是我尝试实现的正则表达式,但对我不起作用。

^((-?[0-9]{1,5}(\.?){1,1}[0-9]{0,2})

它应该允许用户输入以下数字。

-1.12
12345
1
123
12.12

如有任何帮助,我们将不胜感激!

如果您想匹配以 . 结尾的字符串,例如 123. demo of this regex

,正则表达式 ^(-?(\d{1,5}(\.\d{0,2})?)?)$ 应该可以工作

否则,将 0 更改为 1,如下所示:^(-?(\d{1,5}(\.\d{1,2})?)?)$。然后它将只匹配小数点后有数字的字符串。

您发布的正则表达式允许小数点后超过 2 位的字符串,因为它在 2 位后停止匹配,即使字符串继续。在正则表达式的末尾添加 $ 会阻止它匹配在我们想要的部分之后继续的字符串。

此正则表达式 ^(-?\d{1,5}(\.\d{0,2})?)$ 将在用户完成输入后验证输入,因为我假设您不希望 - 在此时有效。

如果您想在输入时进行验证,您可以使用可选组来接受中间值,并在处理值时对整个模式进行最终检查。

^-?(?:\d{1,5}(?:\.\d{0,2})?)?$

说明

  • ^ 字符串开头
  • -? 可选连字符
  • (?:非捕获组
    • \d{1,5}匹配1-45位数字
    • (?:非捕获组
      • \.\d{0,2}匹配一个点和0-2位数字
    • )? 关闭组并使其可选
  • )? 关闭组并使其可选
  • $ 字符串结束

Regex demo

要验证最终模式,您可以匹配可选的 -、1-5 位数字和可选的小数部分:

^-?\d{1,5}(?:\.\d{1,2})?$

Regex demo

您可以使用

^-?\d{0,5}(?:(?<=\d)\.\d{0,2})?$

参见regex demo

详情

  • ^ - 字符串开头
  • -? - 一个可选的 -
  • \d{0,5} - 零到五位数
  • (?:(?<=\d)\.\d{0,2})? - 一个可选的序列
    • (?<=\d) - 当前位置的左边必须有一个数字
    • \. - 一个点
    • \d{0,2} - 零、一位或两位数
  • $ - 字符串结尾。