如何检查给定的字符串是否是有效的URL地址?

我对正则表达式的知识是基本的,不允许我从我已经在网上看到的数百个正则表达式中进行选择。


当前回答

我用这个:/ ((https ?: \ / \ / | ftp: \ / \ / | www \) \ S + \[^。\ n ]+((?:\([^)]*\))|[^.,;:?!"'\ n \)\]<* ])+)/

它很短,但它处理了一些边缘情况,比如某些以括号结尾的维基百科链接(https://en.wikipedia.org/wiki/Sally_(name),这里投票最多的答案似乎没有涵盖这一点。

其他回答

这应该可以工作:

函数validateUrl(价值){ 返回/ ^ (http (s )?:\/\/.)?( www \)。? [-a-zA-Z0-9 @:%._\+~#=]{ 2256} \ [a - z] {2,6} \ b ([-a-zA-Z0-9 @:%_\+.~#?&//=]*)$/ gi.test(价值); } console.log (validateUrl (' google.com '));/ /正确的 console.log (validateUrl (' www.google.com '));/ /正确的 console.log (validateUrl (' http://www.google.com '));/ /正确的 console.log (validateUrl (http: / www.google.com));/ /错误 console.log (validateUrl (' www.google.com/test '));/ /正确的

下面的RegEx可以工作:

"@((((ht)|(f))tp[s]?://)|(www\.))([a-z][-a-z0-9]+\.)?([a-z][-a-z0-9]+\.)?[a-z][-a-z0-9]+\.[a-z]+[/]?[a-z0-9._\/~#&=;%+?-]*@si"

非验证uri引用解析器

为了便于参考,这里是IETF规范:(TXT | HTML)。特别地,附录b用正则表达式解析URI引用演示了如何解析有效的正则表达式。这被描述为,

这是一个非验证URI引用解析器的例子,它将接受任何给定的字符串并提取URI组件。

下面是它们提供的正则表达式:

 ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?

正如其他人所说,最好将此留给您已经在使用的库/框架。

我写了一个很棒的版本,你可以运行

它匹配以下url(这对我来说已经足够好了)

public static void main(args) {
    String url = "go to http://www.m.abut.ly/abc its awesome"
    url = url.replaceAll(/https?:\/\/w{0,3}\w*?\.(\w*?\.)?\w{2,3}\S*|www\.(\w*?\.)?\w*?\.\w{2,3}\S*|(\w*?\.)?\w*?\.\w{2,3}[\/\?]\S*/ , { it ->
        "woof${it}woof"
    })
    println url 
}
http://google.com
http://google.com/help.php
http://google.com/help.php?a=5

http://www.google.com
http://www.google.com/help.php
http://www.google.com?a=5

google.com?a=5
google.com/help.php
google.com/help.php?a=5

http://www.m.google.com/help.php?a=5 (and all its permutations)
www.m.google.com/help.php?a=5 (and all its permutations)
m.google.com/help.php?a=5 (and all its permutations)

对于任何不以http或www开头的url,重要的是它们必须包含/或?

我打赌这可以稍作调整,但它的工作非常好,因为它是如此简短和紧凑……因为你可以把它分成三份:

找到任何以http开头的内容:

https?:\/\/w{0,3}\w*?\.\w{2,3}\S*

找到任何以www开头的东西:

www\.\w*?\.\w{2,3}\S*

或者找到任何必须有一个文本,然后一个点,然后至少两个字母,然后一个?或/:

\w*?\.\w{2,3}[\/\?]\S*

您没有指定使用哪种语言。 如果PHP是,有一个本地函数:

$url = 'http://www.yoururl.co.uk/sub1/sub2/?param=1&param2/';

if ( ! filter_var( $url, FILTER_VALIDATE_URL ) ) {
    // Wrong
}
else {
    // Valid
}

返回过滤后的数据,如果过滤失败则返回FALSE。

看看这里>>

希望能有所帮助。