正则表达式 – 输入模式在IE11中完全不匹配,但在Chrome,FF中

前端之家收集整理的这篇文章主要介绍了正则表达式 – 输入模式在IE11中完全不匹配,但在Chrome,FF中前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
以下输入字段在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发现的唯一一个是^ [0-9] * $的type =’number’“问题”.

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

This implies that the regular expression language used for this
attribute is the same as that used in JavaScript,except that the
pattern attribute must match the entire value,not just any subset
(somewhat as if it implied a ^(?: at the start of the pattern and a )$
at the end).

甚至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");

解决方法

似乎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}或什么都没有,“无”是第一个(或首选)选项.

我建议不要使用“或没有”的习惯用法,即使最后是空分支(这似乎在IE11中也可以正常工作).这不是很常见,我认为一个可选组可以更好地传达您的意图.

猜你在找的正则表达式相关文章