diff --git a/src/validators/url.py b/src/validators/url.py index 613121d5..bcb2cf44 100644 --- a/src/validators/url.py +++ b/src/validators/url.py @@ -112,7 +112,7 @@ def _validate_optionals(path: str, query: str, fragment: str, strict_query: bool optional_segments &= True if fragment: # See RFC3986 Section 3.5 Fragment for allowed characters - optional_segments &= bool(re.fullmatch(r"[0-9a-zA-Z?/:@\-._~!$&'()*+,;=]*", fragment)) + optional_segments &= bool(re.fullmatch(r"[0-9a-zA-Z?/:@\-._~%!$&'()*+,;=]*", fragment)) return optional_segments diff --git a/tests/test_url.py b/tests/test_url.py index 89ae6786..23baf8fa 100644 --- a/tests/test_url.py +++ b/tests/test_url.py @@ -87,6 +87,7 @@ "https://www.foo.com/bar#/baz/test", "https://matrix.to/#/!BSqRHgvCtIsGittkBG:talk.puri.sm/$1551464398" + "853539kMJNP:matrix.org?via=talk.puri.sm&via=matrix.org&via=disroot.org", + "https://example.org/path#2022%201040%20(Cornelius%20Morgan%20G).pdf", # when simple_host=True # "http://localhost", # "http://localhost:8000",