据我所知,还有许多类似于title的其他问题,但我问这个问题的主要原因是我希望我的验证像我想要的那样完美。下面是我的解释,哪个URL应该有效
http://
(如果给定则匹配,否则跳过),domain.com
(应匹配&返回验证)subdomain.domain.com
(应匹配&返回验证)www.com
(应该返回false)http://www.com
(应该返回false)
我搜索了很多关于完美的正则表达式模式根据我的需要,但没有成功,所以这就是为什么我做了我自己和张贴在这里想知道任何其他有效的URL会跳过或不除了http://localhost。如果是,请纠正我。
模式:
((?: http | https | ftp)://) ? (?: www。)? ((? ! www) [A-Z0-9] [A-Z0-9_ -) * (?: [A-Z0-9] [A-Z0-9 _-]*)+):?(' d +) ?/?
我知道这实际上并不能直接回答您的问题,但是除了REGEXes之外,您还可以使用filter_var(),带有FILTER_VALIDATE_URL标志,在有效URL的情况下返回URL,否则返回FALSE:
var_dump(filter_var('http://example.com', FILTER_VALIDATE_URL));
// string(18) http://example.com
您可以在这里阅读该函数使用的过滤器,特别是关于VALIDATE_URL过滤器使用的标志的最后一行。
我实际上不知道它是如何在内部实现的,但我认为它比你可以在野外互联网上找到的许多正则表达式更好。