如何解决正则表达式问题:不允许单个点仅当点前有数字或点后有数字时才允许
我想允许用户键入以下十进制或整数值(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+)?$
,
您可以匹配一个可选的连字符,然后断言该字符串不是以2个零开头。
然后匹配可选数字,可选点和1+个数字,以防止匹配空字符串。
^-?(?!00)\d*\.?\d+$
-
^
字符串的开头 -
-?
匹配可选的-
-
(?!00)
负向查找,在右边不断言2个零 -
\d*
匹配0+个数字 -
\.?
匹配可选的.
-
\d+
匹配1个以上的数字 -
$
字符串结尾
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+)))?$
,
尝试此正则表达式<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/6.2.0/d3.min.js"></script>
<svg></svg>
中括号表示您可以输入0或1位数字。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。