[英]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*$/,
您可以匹配一个可选的连字符,然后断言该字符串不以 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)}`));
试试这个正则表达式^-?[1-9]*\\.?\\d+$
括号表示您可以有 0 或 1 位数字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.