检查网站 URL 的正则表达式

12
我需要使用正则表达式检查网络地址。
如果用户键入URL,则:
  1. www.test.com
  2. http://www.test.com
  3. https://www.test.com

我有一个正则表达式,像这样

/^(http\:\/\/[a-zA-Z0-9_\-]+(?:\.[a-zA-Z0-9_\-]+)*\.[a-zA-Z]{2,4}(?:\/[a-zA-Z0-9_]+)*(?:\/[a-zA-Z0-9_]+\.[a-zA-Z]{2,4}(?:\?[a-zA-Z0-9_]+\=[a-zA-Z0-9_]+)?)?(?:\&[a-zA-Z0-9_]+\=[a-zA-Z0-9_]+)*)$/

但它只允许第二个选项。我该如何修改正则表达式,以便它也接受第一和第三个选项?


请参见 https://mathiasbynens.be/demo/url-regex。 - Martin Thoma
7个回答

24

这是一个用于测试域名的相当基础的表达式:

@^(http\:\/\/|https\:\/\/)?([a-z0-9][a-z0-9\-]*\.)+[a-z0-9][a-z0-9\-]*$@i

应该匹配:

domain.com
www.domain.com
http://domain.com
https://domain.com

4
请注意,此回答不会匹配大写字母。 - Turtle
3
我几分钟前在图案末尾添加了小写字母"i",这应该解决了问题。 - Salman A
2
对于 .Net,它是 (?i:(http://|https://)?([a-z0-9][a-z0-9-].)+[a-z0-9][a-z0-9-]$)。 - Hong
这里匹配的是一个损坏的URL http://www.akgkguuiop。 - Johnykutty
1
@Johnykutty它不检查tld是否有效。 www.akgkguuiop是一个有效的主机名,只是有一个无意义的tld。 - Salman A

3

使用以下程序验证网站URL。

它将验证以下任何有效的网站URL。

  1. www.test.com
  2. http://www.test.com
  3. https://www.test.com

    <?php
            $string_url="https://www.test.com";
            $reg_exp = "/^(http(s?):\/\/)?(www\.)+[a-zA-Z0-9\.\-\_]+(\.[a-zA-Z]{2,3})+(\/[a-zA-Z0-9\_\-\s\.\/\?\%\#\&\=]*)?$/";
            if(preg_match($reg_exp, $string_url) == TRUE){
            echo "URL的格式正确";
            }
            else{
            echo "URL的格式不正确";
            }
    ?>



2
你也可以使用这个模式:
(http(s)?://)?([\w-]+\.)+[\w-]+(/[\w- ;,./?%&=]*)?

这将适用于匹配:
http://www.google.com
https://www.google.com
www.google.com
google.com
google.in

用于匹配的简单模式。

希望这能对某些人有所帮助!!!


接近了,但在这个测试数据“2020-10-27 18:00:10.128”上失败了。 - Brendan Kim
@BrendanKim,我对这个测试数据不太确定。这个简单的正则表达式适用于检查网站 URL,并且似乎你正在检查日期字符串。所以它不适用于这个目的。如果我错过了什么,请告诉我。 - Mohd Haider

1

您可以将 http://https:// 中的 s 都设为可选项,如下:

/^((?:http(?:s)?\:\/\/)?[a-zA-Z0-9_-]+(?:.[a-zA-Z0-9_-]+)*.[a-zA-Z]{2,4}(?:\/[a-zA-Z0-9_]+)*(?:\/[a-zA-Z0-9_]+.[a-zA-Z]{2,4}(?:\?[a-zA-Z0-9_]+\=[a-zA-Z0-9_]+)?)?(?:\&[a-zA-Z0-9_]+\=[a-zA-Z0-9_]+)*)$/

1

模式

(https?:\/\/)?([\w\d]+\.)?[\w\d]+\.\w+\/?.+

这将适用于匹配:

www.demo.com

http://foo.co.uk/


0
尝试使用以下代码替代:
filter_var($your_variable, FILTER_VALIDATE_URL);

在这种情况下,parse_url()函数也非常有用。 - Jeff Stander

0

我的正则表达式可以匹配所有类型的URL。

^(http(s?):\/\/)?(www\.)?+([a-zA-Z0-9\.\-\_]+)(\.[a-zA-Z]{2,3})+(\/[a-zA-Z0-9\_\-\s\.\/\?\%\#\&\=]*)?

Tap to see the Proof with test cases passed


请检查您的正则表达式!它必须适用于PHP。例如使用https://regex101.com/。 - Andy A.

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