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

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


当前回答

如果你想采用更严格的规则,以下是我提出的:

isValidUrl(input) {
    var regex = /^(((H|h)(T|t)(T|t)(P|p)(S|s)?):\/\/)?[-a-zA-Z0-9@:%._\+~#=]{2,100}\.[a-zA-Z]{2,10}(\/([-a-zA-Z0-9@:%_\+.~#?&//=]*))?/
    return regex.test(input)
}

其他回答

我认为有些人无法使用您的php代码,因为其中隐含的修饰符。我复制了你的代码作为一个例子:

if(
    preg_match(
        "/^{$IRI_reference}$/iu",
        'http://www.url.com'
    )
){
    echo 'true';
}

注意“i”和“u”修饰语。如果没有“u”,PHP会抛出一个异常:

Warning: preg_match() [function.preg-match]: Compilation failed: character value in \x{...} sequence is too large at offset XX

黑(http / \ /处事之道会(s) ?):地球,随便(www。)? a-zA-Z0-9 @:%._\+~#=]{ 地球,随便2,256出于美观。黑a-z铝可不,2、6出于美观\ b(黑-a-zA-Z0-9 @:%_\+.~#?&//=]*)

有趣的是,上面的答案都不能满足我的需要,所以我想我可以提供我的解决方案。我需要做到以下几点:

匹配http(s)://www.google.com, http://google.com, www.google.com和google.com 匹配Github降价风格的链接,如[谷歌](http://www.google.com) 匹配所有可能的域名扩展名,比如。com,或。io,或。guru等。基本上长度在2-6个字符之间 将所有内容分成适当的组,以便我可以根据需要访问每个部分。

解决办法是这样的:

/^(\[[A-z0-9 _]*\]\()?((?:(http|https):\/\/)?(?:[\w-]+\.)+[a-z]{2,6})(\))?$

这就满足了上述所有要求。如果需要,你可以选择添加ftp和file功能:

/^(\[[A-z0-9 _]*\]\()?((?:(http|https|ftp|file):\/\/)?(?:[\w-]+\.)+[a-z]{2,6})(\))?$

Javascript现在有一个名为new URL()的URL构造函数。它允许您完全跳过REGEX。

/** * * The URL() constructor returns a newly created URL object representing * the URL defined by the parameters. * * https://developer.mozilla.org/en-US/docs/Web/API/URL/URL * */ let requestUrl = new URL('https://username:password@developer.mozilla.org:8080/en-US/docs/search.html?par1=abc&par2=123&par3=true#Recent'); let urlParts = { origin: requestUrl.origin, href: requestUrl.href, protocol: requestUrl.protocol, username: requestUrl.username, password: requestUrl.password, host: requestUrl.host, hostname: requestUrl.hostname, port: requestUrl.port, pathname: requestUrl.pathname, search: requestUrl.search, searchParams: { par1: String(requestUrl.searchParams.get('par1')), par2: Number(requestUrl.searchParams.get('par2')), par3: Boolean(requestUrl.searchParams.get('par3')), }, hash: requestUrl.hash }; console.log(urlParts);

下面的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"