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



我想允许用户键入以下十进制或整数值(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位数字。

相关内容

最新更新