2010-06-08 90 views
6

我正在尝试使用RegularexpressionValidator来匹配IP过滤系统的IP地址(有可能的通配符)。正则表达式匹配IP地址+通配符

我用正则表达式如下:

"([0-9]{1,3}\\.|\\*\\.){3}([0-9]{1,3}|\\*){1}" 

在LINQPad与Regex.Matches运行时,它工作正常,但似乎并没有当我使用的验证工作。

有没有人有一个更好的正则表达式或为什么它会在测试但不原位工作的建议?

干杯,爱德

+0

你能否提供一些测试情况下,它不能正确地匹配? – VeeArr 2010-06-08 16:35:08

+0

@VeeArr我还没有得到它验证正确,所以任何任意字符串,包括IP地址:D – 2010-06-08 16:49:00

回答

3

asp:RegularExpressionValidator并不需要你加倍转义反斜杠。你应该尝试:

([0-9]{1,3}\.|\*\.){3}([0-9]{1,3}|\*){1}

+0

干杯队友! :) – 2010-06-08 17:48:52

1

如何把上表达

^([0-9]{1,3}\\.|\\*\\.){3}([0-9]{1,3}|\\*){1}$ 
+0

尼斯的建议,但我恐怕仍然不验证! – 2010-06-08 16:48:24

2

[0-9] {1,3}的开始和结束字符串中的字符将允许形式999.999.999.999的IP地址。您的IP地址范围应该只允许0-255。 (0-9){1,2})|(1 [0-9] {2,2})|(2 [0- 4] [0-9])|(25 [0-5])
这对我来说看起来很复杂,可能有更好的方法来做这件事,但乍一看似乎是正确的。

+1

我并没有大规模地谈论实际的IP地址是否有效,只是格式(稍后解析起来更容易),但是采取了一些措施。 – 2010-06-08 16:47:08

5

这个:\\.|\\*\\.看起来像狡猾的位。做到这一点,而不是:

@"^(([0-9]{1,3}|\*)\.){3}([0-9]{1,3}|\*)$" 

而且只接受0-255(感谢,apoorv020):

^((([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5])|\*)\.){3}(([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5])|\*)$ 
+0

另一个很好的建议,但我恐怕也行不通! – 2010-06-08 16:57:49

+0

它确实 - 在http://gskinner.com/RegExr/尝试它。确保在字符串前有一个“@”。如果它仍然不起作用,请向我们展示您用于匹配它的代码。注意我试图将它匹配到像'192.168。*。*和'10。*。*。*'这样的东西 - 这是你想要的吗?你能告诉我们一些测试用例吗? – 2010-06-08 17:00:44

+0

我不认为你阅读我的问题很对:我原来的正则表达式会匹配IPv4地址和通配符,不用担心,但它不能在asp:RegularExpressionValidator中工作。你的正则表达式有完全相同的问题。 – 2010-06-08 17:02:12

0

我的答案是普通的.NET,不RegularExpressionValidator特异性。

正则表达式字符串IP匹配(使用ExplicitCapture避免无用的拍摄,并保持RE简洁):

"\\b0*(2(5[0-5]|[0-4]\\d)|1?\\d{1,2})(\\.0*(2(5[0-5]|[0-4]\\d)|1?\\d{1,2})){3}\\b" 

根据具体的使用情况,你可能想在开始添加适当的锚,即\A^\Z$。然后你可以删除字边界要求:\b

(记住里面的字符串倍增\