为什么除了html5输入模式属性之外,这个简单的regex在任何地方都能工作

Why does this simple regex work everywhere except html5 input pattern attribute?

本文关键字:regex 简单 任何地 工作 html5 输入模式 属性 为什么      更新时间:2023-09-26

当输入中的值为"1"时,此HTML输入将自己涂成红色,表示模式不匹配。

var inp = document .createElement ('input');
inp .pattern = '^'d+'.?'d*$';
document .getElementById ("foo") .appendChild (inp);

当我在其他地方测试正则表达式/^'d+'.?'d*$/时,它与"1"匹配。看起来它也应该。

为什么表单元素不匹配?(Firefox)

字符串表示,儿子。

您对模式属性的使用是正确的,因为您使用的是字符串文字。来自MDN:

正则表达式语言与JavaScript语言相同。这个图案周围并没有正向斜线。

然而,在字符串文字中,在斜杠获得字符串文字意义上的li'l解释之前,必须转义'。如果对其进行转义,它将被视为一个实际的斜杠,然后整个模式将被RegExp引擎识别为一个特殊字符。

var inp = document.createElement('input');
inp.pattern = '^''d+''.?''d*$';
document.getElementById("foo").appendChild(inp);

https://jsfiddle.net/qatt3rwt/4/