我写了正则表达式验证网址,它适用于大多数网址我在下面的网址它不起作用:
我的正则表达式:
/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([?=\/\w \.-]*)\/?$/
https://www.facebook.com/permalink.php?story_fbid=802451379821615&id=298161773583914&pnref=story
如何使其适用于所有网址
答案 0 :(得分:1)
我的理解是,为每个可能的有效URL提供服务会导致严重的问题。但是,根据this resource,有一个非常简单的正则表达式应该处理大多数边缘情况。
@stephenhay尝试这个,无论如何它适用于你的例子:
^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$
答案 1 :(得分:0)
您的正则表达式必须使用ipv6,utf8字符...
处理以下情况的IPv4
http://192.168.1.1/test.htm
的IPv6
http://[2a00:1450:4007:806::1007]/!voilà
国际字符
http://bébé.fr/
事实上,许多复合物的可能性更好的是测试协议和主机名:
if (preg_match("#^(https?)://([^/]+)/#", $url, $out)) {
if (gethostbyname($out[2])) {
return 1;
}
}
return 0;
或者更简单的解决方案是不使用正则表达式并使用处理所有情况的PHP parse_url()
函数。
答案 2 :(得分:0)
只使用
编写REGEX是没有意义的filter_var($url, FILTER_VALIDATE_URL);
将值验证为URL(根据»http://www.faqs.org/rfcs/rfc2396),可选择使用必需的组件。请注意,有效的URL可能未指定HTTP协议http://因此可能需要进一步验证以确定URL使用预期协议,例如ssh://或mailto:。请注意,该函数只能找到有效的ASCII URL;国际化域名(包含非ASCII字符)将失败。
对于JavaScript检查
https://code.google.com/p/google-caja/source/browse/trunk/src/com/google/caja/plugin/uri.js