我想允许用户键入以下十进制或整数值(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+)?$
示例演示
您可以使用以下表达式,该表达式根据点之前的数字来计算点。
^-?(((?!00)d+(?:.{1}d*)*)|((?!00)d*(?:.{1}d+)))?$
演示链接
您可以匹配一个可选的连字符,然后断言字符串不以2个零开头。
然后匹配可选数字、可选点和匹配1+个数字,以防止匹配空字符串。
^-?(?!00)d*.?d+$
^
字符串开始-?
匹配可选-
(?!00)
否定前瞻,不直接向右断言2个零d*
匹配0+位数字.?
匹配可选.
d+
匹配1+位数字$
字符串结束
Regex演示
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)}`));
尝试此正则表达式^-?[1-9]*.?d+$
括号中表示可以有0或1位数字。