正则表达式匹配IP地址+通配符

时间:2010-06-08 16:29:15

标签: c# asp.net regex validation

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

我正在使用以下正则表达式:

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

使用Regex.Matches在LINQPad中运行它时效果很好,但是当我使用验证器时它似乎不起作用。

是否有人建议更好的正则表达式或为什么它会在测试中起作用而不是在原位?

干杯,艾德

5 个答案:

答案 0 :(得分: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])|\*)$

答案 1 :(得分:3)

asp:RegularExpressionValidator不要求您双重转义反斜杠。你应该试试:

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

答案 2 :(得分:2)

[0-9] {1,3}将允许使用999.999.999.999表格的IP地址。您的IP地址范围应仅允许0-255。
用[0-9] {1,3}替换所有出现的 ([0-9] {1,2})|(1 [0-9] {2,2})|(2 [0-4] [0-9])|(25 [0-5])<登记/> 这对我来说似乎非常复杂,可能有更好的方法来做到这一点,但乍一看似乎是正确的。

答案 3 :(得分:1)

如何在表达式上放置开始和结束字符串

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

答案 4 :(得分: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

(请记住在字符串中加倍\