Regular Expression to match IP address + wildcard
I'm trying to use a RegularexpressionValidator to match an IP address (with possible wildcards) for an IP filtering system.
I'm using the following Regex:
"([0开发者_运维百科-9]{1,3}\\.|\\*\\.){3}([0-9]{1,3}|\\*){1}"
Which works fine when running it in LINQPad with Regex.Matches, but doesn't seem to work when I'm using the validator.
Does anyone have a suggestion as to either a better Regex or why it would work in test but not in situ?
Cheers, Ed
This: \\.|\\*\\.
looks like the dodgy bit. Do this instead:
@"^(([0-9]{1,3}|\*)\.){3}([0-9]{1,3}|\*)$"
And to only accept 0-255 (thanks, 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])|\*)$
asp:RegularExpressionValidator
does not require you to double-escape backslashes. You should try:
([0-9]{1,3}\.|\*\.){3}([0-9]{1,3}|\*){1}
[0-9]{1,3} would allow IP addresses of the form 999.999.999.999 . Your IP address range should allow only 0-255.
Replace all occurences of [0-9]{1,3} with
([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5])
This does seem very complicated to me, and probably there are better ways of doing this, but it seems correct at first glance.
How about putting start and end string characters on the expression
^([0-9]{1,3}\\.|\\*\\.){3}([0-9]{1,3}|\\*){1}$
My answer is general for .NET, not RegularExpressionValidator
-specific.
Regex string for IP matching (use ExplicitCapture
to avoid useless capturing and keep RE concise):
"\\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"
Depending on particular use case you may want to add appropriate anchors, i.e. \A
or ^
at the beginning and \Z
or $
at the end. Then you can remove word-boundaries requirement: \b
.
(Remember about doubling \
inside the string)
精彩评论