如何检查给定的字符串是否是有效的URL地址?
我对正则表达式的知识是基本的,不允许我从我已经在网上看到的数百个正则表达式中进行选择。
如何检查给定的字符串是否是有效的URL地址?
我对正则表达式的知识是基本的,不允许我从我已经在网上看到的数百个正则表达式中进行选择。
当前回答
这是一个相当老的线程,现在的问题要求一个基于正则表达式的URL验证器。我在寻找完全相同的东西时也碰到了这条线。虽然很可能编写一个真正全面的正则表达式来验证url。我最终选择了另一种方法——使用PHP的parse_url函数。
如果url无法解析,则返回布尔false。否则,它返回方案、主机和其他信息。这对于一个全面的URL检查本身可能还不够,但是可以深入到进一步的分析中。如果目的仅仅是捕捉拼写错误、无效方案等。这完全足够了!
其他回答
我用这个:/ ((https ?: \ / \ / | ftp: \ / \ / | www \) \ S + \[^。\ n ]+((?:\([^)]*\))|[^.,;:?!"'\ n \)\]<* ])+)/
它很短,但它处理了一些边缘情况,比如某些以括号结尾的维基百科链接(https://en.wikipedia.org/wiki/Sally_(name),这里投票最多的答案似乎没有涵盖这一点。
这可能不是正则表达式的工作,而是您所选语言中的现有工具的工作。您可能希望使用已经编写、测试和调试过的现有代码。
在PHP中,使用parse_url函数。
URI模块。
Ruby: URI模块。
.NET: 'Uri'类
正则表达式并不是你在每个涉及字符串的问题上挥舞的魔杖。
检查URL正则表达式将是:
^http(s{0,1})://[a-zA-Z0-9_/\\-\\.]+\\.([A-Za-z/]{2,5})[a-zA-Z0-9_/\\&\\?\\=\\-\\.\\~\\%]*
对我来说,URL的最佳正则表达式是:
"(([\w]+:)?//)?(([\d\w]|%[a-fA-F\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?"
匹配一个URL有各种各样的选项,这取决于你的要求。 下面是一些例子。
_(^|[\s.:;?\-\]<\(])(https?://[-\w;/?:@&=+$\|\_.!~*\|'()\[\]%#,☺]+[\w/#](\(\))?)(?=$|[\s',\|\(\).:;?\-\[\]>\)])_i
#\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))#iS
有一个链接提供了10多种不同的URL验证方法。
https://mathiasbynens.be/demo/url-regex