只允许负号作为第一个输入

时间:2019-04-04 14:30:09

标签: angularjs regex input numeric

我在数字输入中使用正则表达式以仅允许数字和逗号,但是现在我想添加负数的机会,可以像这样text.replace(/[^0-9,-]/g, '');来完成。

但是,我想只允许负号作为第一个输入,以避免像1-3,7这样的事情。

1 个答案:

答案 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