>事实: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
之上添加限制。