1.2-1.4或1.2.3.4-1.3.4.5或1.2.3.4.5.6-1.2.3.4.5.7等类群的正则表达式

时间:2014-11-03 07:57:59

标签: asp.net regex

我想将它用于ASP.NET验证器,但正如我没有学习一本书所以我不能写正则表达式。

在标题中,我希望匹配以下格式的内容:

1.2-4.394

1.33.321.213-2.324.23.545

点数(。)增加但必须可被2整除

2 个答案:

答案 0 :(得分:3)

这有点棘手,因为它涉及balancing groups

^
(?<nb>                       # First series of numbers
  (?:^|(?<=[0-9])\.)         # BOL or dot
  (?>[0-9]+)\.(?>[0-9]+)     # Number pair
)+
-
(?<-nb>                      # Second series of numbers
  (?>[0-9]+)\.(?>[0-9]+)     # Number pair
  (?:$|\.(?=[0-9]))          # EOL or dot
)+
$
(?(nb)(?!))                  # Make sure the second series has the same digit count

Demo

IgnorePatternWhitespace一起使用以提高可读性,您也可以写:

^(?<nb>(?:^|(?<=[0-9])\.)(?>[0-9]+)\.(?>[0-9]+))+-(?<-nb>(?>[0-9]+)\.(?>[0-9]+)(?:$|\.(?=[0-9])))+$(?(nb)(?!))

但是,这在JavaScript中无法使用,因为JavaScript具有非常有限的正则表达式功能。您应该将EnableClientScript上的RegularExpressionValidator设置为false

答案 1 :(得分:1)

当它无法使用ASP.NET神奇的正则表达式时,并且点不能被2整除你可以这样做:

^(?:\d+\.\d+-\d+\.\d+|(?:\d+\.){2}\d+\.\d+-(?:\d+\.){2}\d+\.\d+|(?:\d+\.){4}\d+\.\d+-(?:\d+\.){4}\d+\.\d+|(?:\d+\.){6}\d+\.\d+-(?:\d+\.){6}\d+\.\d+|(?:\d+\.){8}\d+\.\d+-(?:\d+\.){8}\d+\.\d+)$

但这只适用于1,3,5,7,9点(在 - 之前和之后)......

测试:here