Python:“validators.url”不接受1-9的端口号,但接受大于65535的端口



>事实:TCP/UDP 端口号范围从 1-65535 开始。

但是,我刚刚注意到validators.url不接受 1-10 的端口号?

>>> for i in range(1,11): validators.url('http://example.com:%s' %i)
...
ValidationFailure(func=url, args={'value': 'http://example.com:1', 'public': False})
ValidationFailure(func=url, args={'value': 'http://example.com:2', 'public': False})
ValidationFailure(func=url, args={'value': 'http://example.com:3', 'public': False})
ValidationFailure(func=url, args={'value': 'http://example.com:4', 'public': False})
ValidationFailure(func=url, args={'value': 'http://example.com:5', 'public': False})
ValidationFailure(func=url, args={'value': 'http://example.com:6', 'public': False})
ValidationFailure(func=url, args={'value': 'http://example.com:7', 'public': False})
ValidationFailure(func=url, args={'value': 'http://example.com:8', 'public': False})
ValidationFailure(func=url, args={'value': 'http://example.com:9', 'public': False})
True
>>>

它还接受大于 65535 的端口号。

>>> for i in range(65535,65538): validators.url('http://example.com:%s' %i)
...
True
True
True
>>>

这种异常行为有什么原因吗?

是否可以只接受 Python3 validators.url 之间的1-65535之间的有效端口号?

正如文档中所解释的,validators.url不是魔法,而是依赖于正则表达式。在端口的特定情况下,正则表达式是

    // port number (optional)
"(?::\d{2,5})?"

这意味着 2 到 5 位数字之间的任何数字都可以使用。因此01可以工作,但个位数整数不起作用。

如果无效的端口号对您来说是一个问题,您可以随时在validators.url之上添加限制。

最新更新