我正在尝试定义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*\#*\**)*)+
表达式支持每个位置的数字#和*。
答案 0 :(得分:1)
我担心你上面发布的正则表达式有一些错误,而且看起来太复杂了。我会这样做:
\d+\{(\d+|\d+\-\d+|\d+\,\d+)\}
最终你可以添加+符号来匹配其中的一个或多个,
(\d+\{(\d+|\d+\-\d+|\d+\,\d+)\})+
或者,如果要匹配特定数量的那些,请使用{m,n}定量表达式:
(\d+\{(\d+|\d+\-\d+|\d+\,\d+)\}){3,}
在这种情况下,我让它恰好匹配3件。