Fix URL validation on long/internationalized URLs (#1423)

* Add URL validation tests

Add test for longer TLDs
Add test for internationalized TLDs

* Fix URL validation with long TLDs

* TLD max size match RFC 1034

---------

Co-authored-by: Jérémy M <jeremy.magrin@gmail.com>
This commit is contained in:
Ragnar Laud 2023-09-04 12:30:43 +03:00 committed by GitHub
parent a46210bb80
commit c998c039ec
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 1 deletions

View File

@ -44,4 +44,19 @@ describe('isURL', () => {
),
).toBeTruthy();
});
it('should return true if the TLD is long', () => {
expect(isURL('https://example.travelinsurance')).toBeTruthy();
});
it('should return true if the TLD is internationalized', () => {
// The longest TLD as of now
// https://stackoverflow.com/questions/9238640/how-long-can-a-tld-possibly-be
// curl -s http://data.iana.org/TLD/tlds-alpha-by-domain.txt \
// | tail -n+2 \
// | awk '{ print length, $0 }' \
// | sort --numeric-sort --reverse \
// | head -n 5
expect(isURL('https://example.xn--vermgensberatung-pwb')).toBeTruthy();
});
});

View File

@ -4,7 +4,7 @@ export function isURL(url: string | undefined | null) {
return (
isDefined(url) &&
url.match(
/^(https?:\/\/)?(www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,4}\b([-a-zA-Z0-9@:%_+.~#?&//=]*)/i,
/^(https?:\/\/)?(www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&//=]*)/i,
)
);
}