加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 06:08:09 所属栏目:百科 来源:网络整理
导读:以下输入字段在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测试代码始终可以在任何浏览器中
以下输入字段在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中也可以正常工作).这不是很常见,我认为一个可选组可以更好地传达您的意图.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读