小编典典

如何在Python中使用正则表达式验证URL?

python

我正在Google App Engine上构建应用程序。我是Python的新手,在过去3天里,我一直对下面的问题problem之以鼻。

我有一个代表RSS Feed的类,在这个类中,我有一个名为setUrl的方法。输入此方法的是URL。

我正在尝试使用re python模块来验证RFC 3986 Reg-
ex(http://www.ietf.org/rfc/rfc3986.txt

下面是一个片段, 应该 工作吗?

p = re.compile('^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?')
m = p.match(url)
if m:
  self.url = url
  return url

阅读 287

收藏
2020-12-20

共1个答案

小编典典

urlparsepy2py3)模块是解析(并验证)URL的一种简单方法。

正则表达式是太多的工作。


没有“验证”方法,因为几乎所有内容都是有效的URL。有一些标点符号规则将其拆分。没有标点符号,您仍然有一个有效的URL。

仔细检查RFC,看看是否可以构造“无效” URL。规则非常灵活。

例如:::::,一个有效的URL。路径是":::::"。漂亮的文件名,但是有效的文件名。

另外,/////也是有效的网址。netloc(“主机名”)为""。路径是"///"。再次,愚蠢。也有效。此URL规范化为"///"等效的URL

类似的东西"bad://///worse/////"是完全有效的。哑巴但有效。

底线 。解析它,然后查看各个部分,看看它们是否在某种程度上令人不快。

您是否希望方案始终为“ http”?您是否希望netloc始终为“
www.somename.somedomain”?您是否要让路径看起来像Unix?还是像窗户?是否要删除查询字符串?还是保留它?

这些不是RFC指定的验证。这些是您的应用程序独有的验证。

2020-12-20