为什么一些有效的正则表达式不适用于html5模式属性?

时间:2013-12-26 23:06:09

标签: javascript regex html5

看到这个小提琴:http://jsfiddle.net/5vTc7/

如果打开控制台,您可以看到模式属性((?=^[0-9]*(\.[0-9]+)?$)(?=.*[1-9]))中的正则表达式与JS的预期结果一致,但是当您在输入中输入任何内容并尝试提交时,它将失败。 / p>

如果我的正则表达式出现问题,我只是试图将其限制为大于0的数字。我想使用数字输入(即<input type="number"/>),但我可以' t,因为它不允许你格式化值(例如,它将显示0.00000001为1e-8,这是不可取的)。

我在这里一无所知。有什么我想念的吗?为什么这不起作用?

2 个答案:

答案 0 :(得分:3)

当您使用带有锚点的模式时,如The pattern attribute中所指定的那样,它也将失败并使用Javascript

var pattern = '^(?=^[0-9]*(\.[0-9]+)?$)(?=.*[1-9])$';
var reg = new RegExp(pattern);
console.log(reg.test('1.0')); // will fail
console.log(reg.test('0.0')); // will fail

请参见修改后的JSFiddle

如果要将输入限制为非空数字,可以使用

\d*[1-9]\d*(?:\.\d*)?|\d+\.\d*[1-9]\d*

此模式在小数点之前或之后至少需要一个非空数字。

请参阅JSFiddle

答案 1 :(得分:-1)

你可以尝试这种模式:

^(?:0+\.0*[1-9][0-9]*|0*[1-9][0-9]*(?:\.[0-9]+)?)$