我目前正在使用输入验证器,我在使用正则表达式时遇到了一些问题。
每次文本更改时,都会测试正则表达式,如果失败则会忽略最后一次更改。
我需要标准数字,包括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("?"));
答案 0 :(得分:1)
根据您在jsfiddle中提供的内容,您只需稍微修改一下。
我将您的正则表达式从/[-+]?\d*\.?\d*/
更改为/^[-+]?\d*\.?\d*$/
。使用新的正则表达式,它将传递您提供的所有传递测试(并且将您标记为失败的所有测试都失败)。
我唯一做的就是添加^
和$
来指定我们希望它匹配提供的整个字符串(从头到尾)。
在你的正则表达式版本中,它正在执行更多的包含而不是等于。它只是试图匹配字符串中的正则表达式模式,如果字符串中有未使用的字符,则无关紧要。