如何验证Perl中的网站URL?

rek*_*sri 4 url perl

我需要一个正则表达式来使用Perl验证网站URL.

小智 11

正则表达式::常见:: URI :: HTTP

  • 网站 URL 可以是 HTTP 或 HTTPS。 (2认同)

bri*_*foy 10

我不使用正则表达式.我尝试创建一个URI对象,看看会发生什么.如果它工作,我有一个URI对象,我可以查询以获得该方案(其他东西变成"无方案"URI).

use URI;

while( <DATA> )
    {
    chomp;
    my $uri = URI->new( $_, 'http' );
    if( $uri->scheme ) { print "$uri is a URL\n"; }
    else               { print "$uri is not a URL\n"; }
    }

__END__
foo.html
http://www.example.com/index.html
abc
www.example.com
Run Code Online (Sandbox Code Playgroud)

如果我正在寻找特定类型的URI,我可以查询该对象以查看它是否满足我需要的任何内容,例如特定的域名.如果我正在使用URL,我可能会创建一个对象,所以我不妨从它开始.

  • 主机名不是URL.如果没有方案,www.example.com可能是主机名,文件或其他内容.没有任何魔法可以区分任何这些东西.它是提供内容和意义的URL. (3认同)
  • 你称之为"服务标识符"的东西实际上被称为"方案",这就是我继续使用该术语的原因. (3认同)

Pao*_*lli 5

既然您谈论的是“网站 URL”,我猜您只对 HTTP 和 HTTPS URL 感兴趣。

为此,您可以使用 Perl 的Data::Validate::URI模块,而不是使用正则表达式。

例如,要验证 HTTP 和 HTTPS URL:

use Data::Validate::URI;
my $url = "http://google.com";
my $uriValidator = new Data::Validate::URI();

print "Valid web URL!" if $uriValidator->is_web_uri($url)
Run Code Online (Sandbox Code Playgroud)

并且,仅验证 HTTP URL:

print "Valid HTTP URL!" if $uriValidator->is_http_uri($url)
Run Code Online (Sandbox Code Playgroud)

最后,验证任何格式正确的 URI:

print "Valid URI!" if $uriValidator->is_uri($url)
Run Code Online (Sandbox Code Playgroud)

相反,如果出于任何原因,您确实需要正则表达式,那么您可以使用类似以下内容来验证 HTTP/HTTPS/FTP/SFTP URL:

print "Valid URL!\n" if $url =~ /^(?:(?:https?|s?ftp))/i;
Run Code Online (Sandbox Code Playgroud)