Hi,

On Thu, Jul 14, 2016 at 10:28 PM, Илья Рассадин <elcaml...@gmail.com> wrote:

> It's really simple regexp that can handle this, I wrote simple example to
> illustrate the idea.
>
> Of course, this $port_re can match invalid port (all port numbers which
> higher than 65536). If it's critical to your case, you can adjust strip
> port function.
>


Yes, that will work for IPv4, not for IPv6 (Regexp::Common:Net needs a
different pattern for a IPv6 regexp).  It's not as simple as that.

You first need to reliably determine whether it's an IPv4 or IPv6 address
(both contain . and : which is generally used for this test), and whether
it's IPv4 or IPv6, that will determine how to strip off the port (such as
using Regexp::Common for example)...

Once you know for certain that you're dealing with an IPv4 OR an IPv6
address, yes, it's easy to strip the port off.  I guess the question wasn't
clear then.  How would you differentiate between a IPv4:port and IPv6.port,
as both contain the same set of numbers.  Assuming IPv4 is decimal only
also won't work as 1:2:3:4::1 is also a perfectly legitimate IPv6 address.

Would need to be some kind of regexp checking the amount of "." vs. the
amount of ":" characters I guess.  IPv4 = 3 dots + 1 colon, whilst IPv6 =
at least two colons and one dot.  Once you know whether you're dealing with
IPv4 or IPv4, a simple split() would be enough to cut the port... The
question is more towards determining reliably what you're working with.

--
Chris.

Reply via email to