【发布时间】:2018-02-15 19:08:23
【问题描述】:
我为此找到了很多问题,但我没有找到实际的答案。
我不需要 http 或 www,应该允许用户输入,例如例子.com
允许:
- http://www.example.berlin
- https://example.de/more
- www.sub.example.de
- example.de
不允许:
- 示例
- 1
- :::::
- .....
其他问题的问题:
Python - How to validate a url in python ? (Malformed or not)(不接受“example.com”)
http://validators.readthedocs.io/en/latest/(不接受“example.com”)
^([a-z0-9]+(-[a-z0-9]+)*.)+[a-z]{2,}$(不允许 http 或子域)
- urlparse(不接受“example.com”)
所以我认为我需要正则表达式,就像上面最后一个例子一样,但有点扩展。 https://docs.python.org/3.6/library/re.html
使用此代码,所有示例都可以正常工作,但“example.de/more”
def verify_url(self, url):
url = url.strip()
if url[-1] == ".":
url = url[:-1]
if url[-1] == "/":
url = url[:-1]
url = url.replace("https://", "")
url = url.replace("http://", "")
if url.startswith("www."):
url = url.replace("www.", "")
result = re.match(
"^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$",
url)
if result:
return url
【问题讨论】:
-
根据您所做的所有研究向我们展示您的尝试。
-
不要尝试这样做。你永远不会做对,你只会惹恼你的用户。
-
“我想我需要正则表达式” 记住那句老话......
-
example是一个有效的主机名 -
urlparse用于解析 URL,因此得名。不适用于验证主机名(同样,您不应该这样做)
标签: python