正则表达式IE预测bug

时间:2012-01-31 14:19:35

标签: javascript regex internet-explorer validation

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

中验证

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

使用

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

在做了一些研究之后,似乎这是由于前瞻性的bug,但由于我对使用正则表达式相当新,我不明白我如何能够正确地修改它来解决这个bug?

请给我更多的知识!!

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

{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*\#*\**)*)+

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

1 个答案:

答案 0 :(得分:1)

我担心你上面发布的正则表达式有一些错误,而且看起来太复杂了。我会这样做:

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

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

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

或者,如果要匹配特定数量的那些,请使用{m,n}定量表达式:

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

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