输入模式在IE11中完全不匹配,但在Chrome中,FF

时间:2015-08-17 15:39:56

标签: regex html5 internet-explorer-11

以下输入字段在Chrome和FF中完全验证,但仅部分在IE11中验证。

<input name="bic" value="" type="text" title="BIC-Code" required
 pattern="[A-Z]{6}[A-Z2-9][A-NP-Z0-2](|[A-WY-Z0-9][A-Z0-9]{2}|X{3})"
>

使用带有8个字符的BIC测试代码始终可以在任何浏览器中使用。使用11个字符对其进行测试会在IE中产生错误。

目前安装的版本:11.0.9600.17959,updateversion:11.0.22

示例:

  • 6个字符在所有浏览器中都有效:RBOSGGSX
  • 11个字符在IE以外的所有浏览器中都有效:GENODEF1S04

问题:

  • IE中是否有错误(可能)?
  • 在IE中使用正则表达式是否存在已知限制?
  • 我是否犯了Chrome和FF忽略的错误?

Google发现的唯一问题是type='number'“问题”与^[0-9]*$

http://www.w3.org/TR/2011/WD-html5-20110525/common-input-element-attributes.html#the-pattern-attribute说:

  

这意味着用于此的正则表达式语言   属性与JavaScript中使用的属性相同,除了   pattern属性必须匹配整个值,而不仅仅是任何子集   (有点好像暗示了^(?:在模式的开头和a)$   最后)。

即使Javascript-Engine在IE11中正确验证:

new RegExp("^[A-Z]{6}[A-Z2-9][A-NP-Z0-2](|[A-WY-Z0-9][A-Z0-9]{2}|X{3})$").test("GENODEF1S04");

1 个答案:

答案 0 :(得分:2)

似乎IE11无法处理第一个分支为空的交替。这样:

(|[A-WY-Z0-9][A-Z0-9]{2}|X{3})

......应该等同于:

((?:[A-WY-Z0-9][A-Z0-9]{2}|X{3})??)

...意味着[A-WY-Z0-9][A-Z0-9]{2}X{3}或什么都没有,&#34;没有&#34;是第一个(或首选)选项。

我建议不要使用&#34;或者没有&#34;成语,即使在最后的空分支(这似乎在IE11中工作正常)。它并不常见,我认为一个可选组可以更好地传达您的意图。