据我所知,还有许多类似于标题的其他问题,但我提出这个问题的主要原因是我希望我的验证尽可能完美。以下是我的解释,哪个URL应该有效
http://
(如果给定则匹配否则跳过),
domain.com
(应匹配& return validate)
subdomain.domain.com
(应匹配& return validate)
www.com
(应该返回false)
http://www.com
(应该返回false)
我根据自己的需要搜索了很多关于完美的正则表达式模式,但没有成功,所以这就是为什么我自己发布并在这里发帖想知道除了http://localhost之外其他任何有效URL都会跳过。 如果是,请纠正我。
模式:
((:HTTP | HTTPS | FTP)://)????!(?:WWW)((WWW)[A-Z0-9] [A-Z0-9_-] *(?: [A-Z0-9] [A-Z0-9 _-] *)+):???(\ d +)/
答案 0 :(得分:1)
我知道这实际上并没有直接回答你的问题,但除了REGEX之外,你还可以使用filter_var(),标志为FILTER_VALIDATE_URL,如果有效网址则返回URL,否则为FALSE:
var_dump(filter_var('http://example.com', FILTER_VALIDATE_URL));
// string(18) http://example.com
您可以阅读here此函数使用的过滤器,尤其是有关VALIDATE_URL过滤器使用的标志的最后一行。
我实际上不知道它是如何在内部实现的,但我认为它比在野外互联网上可以找到的许多正则表达式更好。