【问题标题】:regex to not allow decimal fractions without leading zero正则表达式不允许没有前导零的小数
【发布时间】:2020-10-20 06:08:20
【问题描述】:

正则表达式(^-?[1-9]*?0?(\.\d+)?$)|(^\d+\.$) 允许用户键入以下十进制或整数值

0.500
3
0
0.0
30
500000
4000.22
0.
-0.500
-3

不允许

03.3, 00, 02, 00.0

但上面的正则表达式也允许.3.4

有没有办法不允许.3.44谢谢

我的尝试: (^-?[1-9]*?0+?(\.\d+)?$)|(^\d+\.$) 这似乎不起作用

【问题讨论】:

  • 你为什么使用正则表达式进行数值范围检查?
  • 我正在使用formcontrol作为输入框,并希望在与上述正则表达式不匹配时显示验证错误
  • 您是专门尝试排除精确值 0.3、0.4 和 0.44,还是尝试要求用户始终为小于 1 的小数值提供前导 0?您正在使用哪种正则表达式变体?哪些规则适用于负数?
  • 我想包含 0.3,但不允许用户键入前面没有 0 的 .3
  • 这只是一个小修正@Thefourthbird。毕竟这是您的正则表达式解决方案。您应该将其发布为答案。

标签: javascript angular regex ecmascript-6 angular9


【解决方案1】:

您可以匹配一个可选的-,然后使用否定前瞻断言该模式不是以零后跟数字开头。

感谢@anubhava 进行更正以制作最终图案。

^-?(?!0\d)\d+\.?\d*$

部分模式

  • ^ 字符串开始
  • -? 匹配可选连字符
  • (?!0\d)负前瞻,断言右边的不是0和数字
  • \d+匹配1+位数
  • \.?\d* 匹配可选的 . 和 0+ 位
  • $字符串结束

查看regex demo

【讨论】:

    猜你喜欢
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    相关资源
    最近更新 更多