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

标签 regex html 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,更新版本: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说:

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 引擎也能在 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} 或什么都没有,带有“什么都没有”是第一个(或首选)选项。

我建议不要使用“or nothing”惯用语,即使末尾有空分支(这在 IE11 中似乎工作正常)。这不是很常见,我认为可选组可以更好地传达您的意图。

关于regex - 输入模式在 IE11 中不完全匹配,但在 Chrome 中,FF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32054400/

相关文章:

javascript - 如何在此代码笔中更改为整数而不是 %

Javascript .print() 因 IE11 类型 application/pdf 失败

javascript - 在资源管理器中防止默认不起作用

Python:计算并替换同一次正则表达式?

php - 从数据库中检索时显示多行文本

html - 将 <button> 插入层样式文本溢出 :ellipsis 的末尾

css - 选择{大纲:none} disabled others styling of SELECT element

python - 如何使用长正则表达式进行续行?

ruby - 我将如何获得字符串的这一部分?

java - 如何编写包含双引号 (") 的 Java 字符串文字?