我想将它用于ASP.NET验证器,但正如我没有学习一本书所以我不能写正则表达式。
在标题中,我希望匹配以下格式的内容:
1.2-4.394
1.33.321.213-2.324.23.545
点数(。)增加但必须不可被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
与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