使用正则表达式验证URL

9

我已经尝试了所有可能的方法来验证URL的正则表达式,但是我没有得到任何结果。我需要的是URL可以像下面这样:

google.com
http://google.com
https://google.com
http://www.google.com
https://www.google.com

但如果只是google,则不应允许。

最后要注意的是.extensions是必需的。

我尝试过这个/^[a-z0-9-]+(.[a-z0-9-]*)(.[a-z0-9-]*)$/,有人能在这种情况下帮帮我吗?

5个回答

8
您可以直接使用filter_varFILTER_VALIDATE_URL来验证URL。
if (filter_var($url, FILTER_VALIDATE_URL) !== false)

编辑

使用正则表达式

$subject = "http://www.google.com";
$pattern = "/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i";
preg_match($pattern, $subject, $matches);
print_r($matches);

输出

Array ( [0] => http://www.google.com )

Codepad


我正在使用将存储在我的数据库中的正则表达式进行验证,我不能使用这种条件。 - kumar
为什么不在插入数据库之前使用它呢? - Yogesh Suthar
@Nagendra,请查看已编辑的答案以获取正则表达式。 - Yogesh Suthar
不错,但它无法验证某些协议,例如如果您想验证流媒体URL,则应更改此部分
(?:https?|ftp)

(?:https?|ftp|rtmp|rtsp|mms)
我可能会遗漏其他的。
- aesede

5

试试这个表达式

/[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi

它将接受您上述提到的所有情况。


我不熟悉正则表达式。你能给我 PHP 代码吗? - Rikas
1
使用这个正则表达式已经有一段时间了,最近在一个金融网站上遇到了问题...所以顶级域名的 {2,4} 应该改为 {2,9}。 - Tyler

1
((https?:|[^.])\/\/w{0,3}[.]?google.[a-z]{2,4})|google.[a-z]{2,4}

虽然不太美观,但它可以工作。我已经使用http://regexpal.com/进行了检查。


1
让我提出几个改进意见。1 你可以使用 https?,这将匹配 http 或 https,2 你不需要把 w 放在字符类中,3 {0,1} 表示 ?,所以你可以把它变成 \.?。虽然这个正则表达式对于这个例子有效,但如果我有 http://translate.google.comhttp://google.fr 呢? - HamZa
1
是的,你说得对,有一些改进。他想要它用于他给出的示例,所以我为那些示例编写了它。如果他想要域名,可以很容易地添加。我回答了他想要的或我认为他想要的 :) - Robert

0
你可以尝试以下方法。
(^(http|https)://)?(www\.)?\w+\.com

不匹配“google.com” - Robert
还是不行,去 http://regexpal.com/ 检查一下。 - Robert
对我来说有效。也在http://www.regextester.com/上进行了测试。 - Jaydeep Rajput

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接