Remix.run Logo
meindnoch 21 hours ago

Is that so?

RFC 3986 Appendix B [1] "Parsing a URI Reference with a Regular Expression":

The following line is the regular expression for breaking-down a well-formed URI reference into its components.

  ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?

      scheme    = $2
      authority = $4
      path      = $5
      query     = $7
      fragment  = $9

Let's test your URI with this regex, shall we? [2]

  $2 (scheme) = http
  $4 (authority) = [f021:d981:b487:e57d:193e:550e::]
  $5 (path) = /
Seems correct to me.

[1] https://datatracker.ietf.org/doc/html/rfc3986#appendix-B

[2] https://regexr.com/8nqop

quuxplusone 20 hours ago | parent | next [-]

Hm, but I think he's right. The problem comes when you try to break down the authority portion into host and port; TFA's parser treats the first colon as introducing the port, which is wrong.

https://github.com/bkaradzic/bx/blob/0b001f5f36579e8aea07efa...

meindnoch 20 hours ago | parent [-]

>The problem comes when you try to break down the authority portion into host and port

That's a problem orthogonal to URI parsing.

You parse the URI with the RFC 3986 regex, which gives you the components: scheme, authority, path, query, fragment.

You're then free to parse any of the components according to your own bespoke rules, e.g. the query string often follows the key=value&key=value&... pattern.

afiori 17 hours ago | parent | prev | next [-]

> well-formed URI

A parser that assumes the input to be already valid is usually not enough for most applications

according to that regex this is a valid url

__..__..%%%zz..

meindnoch 14 hours ago | parent [-]

>according to that regex this is a valid url >__..__..%%%zz..

Correctly. It is a valid relative URI, whose path is "__..__..%%%zz..".

f311a 17 hours ago | parent | prev [-]

Regexes are pretty slow, though.

meindnoch 14 hours ago | parent [-]

cc @burntsushi