3
\$\begingroup\$

An attempt with regular expression to do a foolproof validation of an IV4 or Hostname:port Number.

Example texts that can be validated for any of the following:

www.google.com:8080
127.0.0.1:8000
localhost:65535
codereview.stackexchange.com:9000
www.n-plus-t.com:4000
30my_domain.test-ng.com:754
((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))(?![\\d]) | ([\\p{Alnum}+ && [.{1}-_*[\p{Alnum}+]]]){1,253}:(6553[0-5]|655[0-2][0-9]\d|65[0-4](\d){2}|6[0-4](\d){3}|[1-5](\d){4}|[1-9](\d){0,3})

The IPv4 address validations are mainly to ensure that the tuples are between the range 0 to 255. Also the hostname is validated against the valid names which can be alphanumeric, starting with number, subdomains separated by a single . and - and _ allowed in between, though not at end. Port range is validated from 0 to 65535

asked Aug 1, 2018 at 10:18
\$\endgroup\$
4
  • \$\begingroup\$ Which regex implementation are you using? \$\endgroup\$ Commented Aug 1, 2018 at 10:22
  • \$\begingroup\$ Java based regex - java.util.regex \$\endgroup\$ Commented Aug 1, 2018 at 10:23
  • 2
    \$\begingroup\$ Can you explain your approach? As in, why did you go this route? Part of it makes sense, other parts are less obvious. \$\endgroup\$ Commented Aug 1, 2018 at 11:13
  • \$\begingroup\$ updated with the explanation \$\endgroup\$ Commented Aug 1, 2018 at 12:32

1 Answer 1

5
\$\begingroup\$

While this appears to work, there are a few things about it that are not very clear.

Reconsider the use of regex

Rather than using a regex, for the numeric ranges in particular, it may make more sense to capture those values and check them with Java statements. It would certainly reduce the size and complexity of the regex.

Document non-obvious constraints

The current regex includes a 1,253 count, the origin of which is decidedly non-obvious. RFC 1035 and RFC 822 are both obvious candiates for an authoritative source, but this regex does not conform to either of those.

answered Aug 1, 2018 at 13:33
\$\endgroup\$

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.