正则表达式为url一些问题

时间:2015-02-19 18:26:13

标签: javascript php regex

我写了正则表达式验证网址,它适用于大多数网址我在下面的网址它不起作用:

我的正则表达式:

/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([?=\/\w \.-]*)\/?$/

https://www.facebook.com/permalink.php?story_fbid=802451379821615&id=298161773583914&pnref=story

如何使其适用于所有网址

3 个答案:

答案 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