使用正则表达式如何验证网址

时间:2013-10-17 20:55:44

标签: php preg-match

我很简单form应该输入url,但我想使用更好的 regxanything else来检查它是否有效。

我知道有很多关于它的问题已经发布,但是大多数问题在TLDs域之前已经很老了,而ftp//https//

我希望我能得到真正能够涵盖这种url计划的答案

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

〜谢谢,再次抱歉发布重复的问题,但只是为了尽可能获得更新的答案。

3 个答案:

答案 0 :(得分:3)

这可能不是正则表达式的工作,而是适用于您选择的语言的现有工具。正则表达不是一个魔术棒,您可以在遇到涉及字符串的每个问题上挥手。您可能希望使用已编写,测试和调试的现有代码。

在PHP中,使用parse_url函数。

Perl:URI module

Ruby:URI module

.NET:'Uri' class

答案 1 :(得分:2)

parse_url()的使用情况如下,但@wrikken提供了一种更好的方法来简单验证网址是否有效filter_var()parse_url()只是将指定的URL字符串解析为其组成部分,并且显然不会返回false值,除非该网址灾难性已损坏。

filter_var()非常敏感,可以检测到像域名中使用的下划线那样的小问题。

var_dump(
  filter_var(
    'http://stack-overflow.com/questions/19437105/using-regx-how-to-validate-url?noredirect=1#comment28819663_19437105',
     FILTER_VALIDATE_URL
  )
);

//output: string(113) "http://stack-overflow.com/questions/19437105/using-regx-how-to-validate-url?noredirect=1#comment28819663_19437105"

var_dump(
  filter_var(
    'http://stack_overflow.com/questions/19437105/using-regx-how-to-validate-url?noredirect=1#comment28819663_19437105',
    FILTER_VALIDATE_URL
  )
);

//output: bool(false)

parse_url()最好留下您已知道有效的网址部分:

var_dump(parse_url('http://stackoverflow.com/questions/19437105/using-regx-how-to-validate-url?noredirect=1#comment28819663_19437105'));

输出:

array(5) {
  ["scheme"]=>
  string(4) "http"
  ["host"]=>
  string(17) "stackoverflow.com"
  ["path"]=>
  string(50) "/questions/19437105/using-regx-how-to-validate-url"
  ["query"]=>
  string(12) "noredirect=1"
  ["fragment"]=>
  string(24) "comment28819663_19437105"
}

或者怎么样:

答案 2 :(得分:0)

正则表达方便且昂贵,但用于验证网址:

^((ht|f)tp(s?)\:\/\/|~\/|\/)?([\w]+:\w+@)?([a-zA-Z]{1}([\w\-]+\.)+([\w]{2,5}))(:[\d]{1,5})?\/?(\w+\.[\w]{3,4})?((\?\w+=\w+)?(&\w+=\w+)*)?