【问题标题】:Regular Expression IE lookahead bug正则表达式 IE 前瞻错误
【发布时间】:2012-01-31 14:19:35
【问题描述】:

我正在尝试定义 ASP.NET 验证器正常运行所需的正则表达式。目前使用下面的表达式,我能够在 Firefox 中正确验证以下示例字符串,但不能在 IE 中验证

12{2}12{0-9}1{12,13}

使用

(({\d+\})*|(\d)*|({(\d+,)+\d+\})*|({(\d+)\-(\d+)\})*)+

经过一些研究,这似乎是由于前瞻错误造成的,但由于我对使用正则表达式相当陌生,我不明白如何正确修改它以解决该错误?

请给我更高的知识!!

编辑: 表达式必须匹配这三个可选的单独组件,它们可以以任何顺序出现在字符串中。我试图提出一个描述每个单独组件的表达式,然后将它们合并为一个表达式。

{n} regex {\d+\}  to match sample {423} optional digits

{n,n,n} regex {(\d+,)+\d+\} to match sample set of digit {24,25,26}

{n-n} regex {(\d+)\-(\d+)\} to match sample range of {0-9}

individual digits (\d) to match sample 232

编辑 2: 最后我将使用这个表达方式,特别感谢 woohoo

((\d*\#*\**)*\{((\d*\#*\**)+|(\d*\#*\**)+\-(\d*\#*\**)+|((\d*\#*\**)+\,)+(\d*\#*\**)+)\}(\d*\#*\**)*)+

表达式在每个位置都支持数字 # 和 *。

【问题讨论】:

  • 这是在服务器上的 C# 中完成的,还是在浏览器中的 JavaScript 中完成的?如果在服务器上使用 C#,那么浏览器的选择对此没有影响。
  • 它是在浏览器和服务器上完成的,因为我使用的是 asp.net 正则表达式验证器组件,但它在浏览器上失败
  • 您最好删除 C# 和 asp.net 标签,并添加 javascript 和 ie 标签。我也会在浏览器中查看源代码,然后复制 javascript 并将其粘贴到这篇文章中。
  • 所有其他正则表达式验证都是使用 asp.net 原生组件完成的
  • 当我说“删除标签”时,我指的是这篇文章中的标签,而不是代码中的 HTML/ASP.NET 标签。

标签: javascript regex internet-explorer validation


【解决方案1】:

恐怕您在上面发布的正则表达式有一些错误,对于您尝试实现的目标来说,它看起来太复杂了。我会这样做:

\d+\{(\d+|\d+\-\d+|\d+\,\d+)\}

最终你可以添加+号来匹配其中的一个或多个,

(\d+\{(\d+|\d+\-\d+|\d+\,\d+)\})+

或者,如果您想匹配其中的特定数量,请使用 {m,n} 定量表达式:

(\d+\{(\d+|\d+\-\d+|\d+\,\d+)\}){3,}

在这种情况下,我让它正好匹配 3 件。

【讨论】:

  • 您好,感谢您的回复。我同意你的说法,我的表达很复杂,很可能对于它应该做的事情来说太复杂了。我进行了编辑以提供更多详细信息。我现在就试一试你提出的建议。
  • 对你的表达式做了一些小的编辑 (\d*\{(\d+|\d+\-\d+|(\d+\,)+\d+)\}\d*)+ 它现在似乎表现得很好,现在更简单,更容易阅读。在我标记答案之前,我想进行一些进一步的测试。
猜你喜欢
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 2011-10-14
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多