<p>Does anyone have a regular expression handy that will match any legal DNS hostname or IP address?</p>

<p>It's easy to write one that works 95% of the time, but I'm hoping to get something that's well tested to exactly match the latest RFC specs for DNS hostnames.</p>

You can use the following regular expressions separately or by combining them in a joint OR expression.
```
```
ValidIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";

ValidHostnameRegex = "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$";
```
```
ValidIpAddressRegex
matches valid IP addresses and
ValidHostnameRegex
valid host names. Depending on the language you use \ could have to be escaped with \.
ValidHostnameRegex
is valid as per
RFC 1123
. Originally,
RFC 952
specified that hostname segments could not start with a digit.
http://en.wikipedia.org/wiki/Hostname
The original specification of
hostnames in
RFC
952
,
mandated that labels could not start
with a digit or with a hyphen, and
must not end with a hyphen. However, a
subsequent specification (
RFC
1123
)
permitted hostname labels to start
with digits.
```
```
Valid952HostnameRegex = "^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$";
```
```