繁体   English   中英

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

[英]regex question: not allow a single dot (allow only if have digit before dot or digit after dot)

我想允许用户输入以下十进制或整数值 (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+)))?$

演示链接

试试这个正则表达式^-?[1-9]*\\.?\\d+$

括号表示您可以有 0 或 1 位数字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM