我在数字输入中使用正则表达式以仅允许数字和逗号,但是现在我想添加负数的机会,可以像这样text.replace(/[^0-9,-]/g, '');
来完成。
但是,我想只允许负号作为第一个输入,以避免像1-3,7
这样的事情。
答案 0 :(得分:1)
我建议在此处仅使用字符串test()
,并使用适当的正则表达式模式:
^-?\d{1,3}(?:,\d{3})*(?:\.\d+)?$
您可以简单地拒绝任何未通过此正则表达式的输入。这比尝试对输入进行替换更有意义,因为并非所有输入都可以挽回。
示例:
var pass1 = 123.456;
var pass2 = -999;
var pass3 = '123,456,789.888';
var fail = '1-3,7';
console.log(/^-?\d{1,3}(?:,\d{3})*(?:\.\d+)?$/.test(pass1));
console.log(/^-?\d{1,3}(?:,\d{3})*(?:\.\d+)?$/.test(pass2));
console.log(/^-?\d{1,3}(?:,\d{3})*(?:\.\d+)?$/.test(pass3));
console.log(/^-?\d{1,3}(?:,\d{3})*(?:\.\d+)?$/.test(fail));
该模式的简要说明:
^ from the start of the string
-? match an optional negative sign
\d{1,3} match one to three digits
(?:,\d{3})* followed by a thousands term (, + 3 digits) zero or more times
(?:\.\d+)? followed by an optional decimal component
$ end of the string