Javascript url的正则表达式有一些问题

Javascript url的正则表达式有一些问题,javascript,php,regex,Javascript,Php,Regex,我编写了regex来验证url,它可以很好地用于大多数url,但对于以下url它不起作用: 我的正则表达式: /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([?=\/\w \.-]*)\/?$/ 如何使其适用于所有URL我的理解是,满足每一个可能的有效URL都会带来很大的麻烦。然而,基于,有一个非常简单的正则表达式可以处理大多数边缘情况 通过@stephenhay尝试此方法,它对您的示例仍然有效: ^(https?|ftp):\/\/[^\s/$

我编写了regex来验证url,它可以很好地用于大多数url,但对于以下url它不起作用:

我的正则表达式:

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


如何使其适用于所有URL

我的理解是,满足每一个可能的有效URL都会带来很大的麻烦。然而,基于,有一个非常简单的正则表达式可以处理大多数边缘情况

通过@stephenhay尝试此方法,它对您的示例仍然有效:

^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$

您的正则表达式必须使用ipv6、utf8字符处理以下情况

ipv4

ipv6

国际角色

http://bébé.fr/
事实上,有许多复杂的可能性,因此更好的办法是测试协议和主机名:

if (preg_match("#^(https?)://([^/]+)/#", $url, $out)) {
   if (gethostbyname($out[2])) {
     return 1;
   }
}
return 0;

或者更简单的解决方案是不使用正则表达式,而是使用PHP
parse_url()
函数来处理所有情况。

只使用

filter_var($url, FILTER_VALIDATE_URL);
将值验证为URL(根据»),可选地使用所需组件。请注意,有效的URL可能未指定HTTP协议HTTP://因此可能需要进一步验证以确定URL是否使用预期的协议,例如ssh://或mailto:。请注意,该函数将只查找有效的ASCII URL;国际化域名(包含非ASCII字符)将失败

用于JavaScript检查


也需要使用javascript
if (preg_match("#^(https?)://([^/]+)/#", $url, $out)) {
   if (gethostbyname($out[2])) {
     return 1;
   }
}
return 0;
filter_var($url, FILTER_VALIDATE_URL);