Ed James
Ed James

Reputation: 10607

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

Upvotes: 6

Views: 7470

Answers (5)

przemoc
przemoc

Reputation: 3869

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)

Upvotes: 0

VeeArr
VeeArr

Reputation: 6178

asp:RegularExpressionValidator does not require you to double-escape backslashes. You should try:

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

Upvotes: 3

Callum Rogers
Callum Rogers

Reputation: 15819

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])|\*)$

Upvotes: 4

apoorv020
apoorv020

Reputation: 5650

[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.

Upvotes: 2

Mike
Mike

Reputation: 6050

How about putting start and end string characters on the expression

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

Upvotes: 1

Related Questions