允许负数和单数的浮点数的正则表达式。而且 -

时间:2015-11-06 15:32:25

标签: javascript regex floating-point

我目前正在使用输入验证器,我在使用正则表达式时遇到了一些问题。

每次文本更改时,都会测试正则表达式,如果失败则会忽略最后一次更改。

我需要标准数字,包括int和float。正面和负面以及单一“。”和单个“ - ”。 空字符串也应该有效。

我用有效和无效的案例创造了这个小提琴: https://jsfiddle.net/rrjfkjvz/1/

var regex = /[-+]?\d*\.?\d*/;

console.log("ok");
console.log(regex.test(""));
console.log(regex.test("."));
console.log(regex.test(".1"));
console.log(regex.test("1.1"));
console.log(regex.test("-"));
console.log(regex.test("-1"));
console.log(regex.test("0"));
console.log(regex.test("1"));
console.log(regex.test("-."));
console.log(regex.test("-.1"));
console.log(regex.test("-1."));
console.log(regex.test("-1.1"));

console.log("fail");
console.log(regex.test(".."));
console.log(regex.test("--"));
console.log(regex.test("-1-"));
console.log(regex.test(".1."));
console.log(regex.test("a"));
console.log(regex.test("_"));
console.log(regex.test("?"));

1 个答案:

答案 0 :(得分:1)

根据您在jsfiddle中提供的内容,您只需稍微修改一下。

我将您的正则表达式从/[-+]?\d*\.?\d*/更改为/^[-+]?\d*\.?\d*$/。使用新的正则表达式,它将传递您提供的所有传递测试(并且将您标记为失败的所有测试都失败)。

我唯一做的就是添加^$来指定我们希望它匹配提供的整个字符串(从头到尾)。

在你的正则表达式版本中,它正在执行更多的包含而不是等于。它只是试图匹配字符串中的正则表达式模式,如果字符串中有未使用的字符,则无关紧要。