带参数的URL的正则表达式


Regular Expression for URL with parameters

我使用以下表达式来有效URL,如下所示:http://www.linkedin.com/in/johndoe

(http|https|ftp):'/'/(([A-Z0-9][A-Z0-9_-]*)('.linkedin)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:('d+))

但验证仅适用于http://www.linkedin.com

如果我输入带参数的完整url,它不起作用。请帮忙。

尝试使用此正则表达式:

(?i)(?:https?|ftps?)://[A-Z0-9][A-Z0-9_-]*'.linkedin+'.(?:com|org|net|dk|at|us|tv|info|uk|co'.uk|biz|se)(?::'d+)?(?:/.*)?$

您的正则表达式将失败,因为它检查TLD之后的字符串结尾(请参阅se)之后的$)。此外,它只会验证"linked.in"URL。

所以,你必须让更多的字符。这是您的固定正则表达式。

^(?>(?:https?|ftp):'/'/(?:(?:[a-zA-Z0-9][a-zA-Z0-9_-]*)'.linkedin'.(?:com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se))(?:(?:'/[^'/'r'n]*)*)?)$

两者都匹配:

http://www.linkedin.com/in/johndoe
http://www.linkedin.com

示例程序:

<?php
   $re = "/^(?>(?:https?|ftp):''/''/(?:(?:[a-zA-Z0-9][a-zA-Z0-9_-]*)''.linkedin''.(?:com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se))(?:(?:''/[^''/''r''n]*)*)?)$/m"; 
   $str = "http://www.linkedin.com/in/johndoe'n'nhttp://www.linkedin.com"; 
   preg_replace_callback($re, function ($matches) {
        echo "Matched: " . $matches[0] . "'n";
      },  $str);
?>

您的表达式中有错误,您清楚地识别了linkedin。

使用此:

if (!filter_var($url, FILTER_VALIDATE_URL) === false) {
    echo("$url is a valid URL");
} else {
    echo("$url is not a valid URL");
}

来源:http://www.w3schools.com/php/filter_validate_url.asp