看到这个小提琴:http://jsfiddle.net/5vTc7/
如果打开控制台,您可以看到模式属性((?=^[0-9]*(\.[0-9]+)?$)(?=.*[1-9])
)中的正则表达式与JS的预期结果一致,但是当您在输入中输入任何内容并尝试提交时,它将失败。 / p>
如果我的正则表达式出现问题,我只是试图将其限制为大于0的数字。我想使用数字输入(即<input type="number"/>
),但我可以' t,因为它不允许你格式化值(例如,它将显示0.00000001为1e-8,这是不可取的)。
我在这里一无所知。有什么我想念的吗?为什么这不起作用?
答案 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]+)?)$