我很简单form
应该输入url
,但我想使用更好的 regx
或anything 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
〜谢谢,再次抱歉发布重复的问题,但只是为了尽可能获得更新的答案。
答案 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+)*)?