微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正则表达式问题:不允许单个点仅当点前有数字或点后有数字时才允许

如何解决正则表达式问题:不允许单个点仅当点前有数字或点后有数字时才允许

我想允许用户键入以下十进制或整数值(A)

.5
0.500
3
0
0.0
30
500000
4000.22
0.

这是我使用过的以下正则表达式:

factor: /^-?\d*[.]??\d*$/,

但是问题是上面的正则表达式还允许以下无效数字(B)

        . (comment: a single dot )
       00.5 (multiple zeros before dot)
      0000.5
       00 (multiple zeros)

也不允许用户输入负值,即-3,-0.5

我正在尝试修改上述正则表达式,以允许(B)处的无效值,但允许(A)处的值

我的尝试无效:

 factor: /^-?\d*[.]+\d*$/,

解决方法

尝试以下正则表达式:

^-?[1-9]*?0?(\.\d+)?$

Example Demo

,

您可以匹配一个可选的连字符,然后断言该字符串不是以2个零开头。

然后匹配可选数字,可选点和1+个数字,以防止匹配空字符串。

^-?(?!00)\d*\.?\d+$
  • ^字符串的开头
  • -?匹配可选的-
  • (?!00)负向查找,在右边不断言2个零
  • \d*匹配0+个数字
  • \.?匹配可选的.
  • \d+匹配1个以上的数字
  • $字符串结尾

Regex demo

const regex = /^-?(?!00)\d*\.?\d+$/;
[
  ".5","0.500","3","0","0.0","30","500000","4000.22",".","00.5","0000.5","00","-4000","-0","-00",","00.4"
].forEach(s => console.log(`${s} --> ${regex.test(s)}`));

,

您可以使用以下表达式,该表达式根据点之前的数字来计算点。

^-?(((?!00)\d+(?:\.{1}\d*)*)|((?!00)\d*(?:\.{1}\d+)))?$

Demo link

,

尝试此正则表达式<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/6.2.0/d3.min.js"></script> <svg></svg>

中括号表示您可以输入0或1位数字。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?