我正在尝试使用正则表达式验证器来匹配IP地址(可能带通配符)以用于IP过滤系统。
我正在使用以下正则表达式:
"([0-9]{1,3}\\.|\\*\\.){3}([0-9]{1,3}|\\*){1}"
当在LINQPad中使用Regex.Matches运行它时,它可以正常工作,但在使用验证器时似乎无法正常工作。
有人有更好的正则表达式建议或者为什么测试可以但实际应用不能的建议吗?
谢谢,Ed
我正在尝试使用正则表达式验证器来匹配IP地址(可能带通配符)以用于IP过滤系统。
我正在使用以下正则表达式:
"([0-9]{1,3}\\.|\\*\\.){3}([0-9]{1,3}|\\*){1}"
当在LINQPad中使用Regex.Matches运行它时,它可以正常工作,但在使用验证器时似乎无法正常工作。
有人有更好的正则表达式建议或者为什么测试可以但实际应用不能的建议吗?
谢谢,Ed
\\.|\\*\\.
看起来有点可疑。请改为以下内容:@"^(([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])|\*)$
\
替换转义的反斜杠\\
来测试你原本编写的正则表达式吗?(不使用C#的@
转义字符)例如:尝试以下正则表达式^(([0-9]{1,3}|\*)\.){3}([0-9]{1,3}|\*)$
或者(([0-9]{1,3}|\*)\.){3}([0-9]{1,3}|\*)
- VeeArrasp:RegularExpressionValidator
不需要您对反斜杠进行双重转义。您可以尝试使用以下内容:
([0-9]{1,3}\.|\*\.){3}([0-9]{1,3}|\*){1}
[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])
对我来说,这似乎非常复杂,可能有更好的方法来实现这一点,但乍一看似乎是正确的。
^([0-9]{1,3}\\.|\\*\\.){3}([0-9]{1,3}|\\*){1}$
我的回答是针对.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
。\
)