带参数的URL的正则表达式

时间:2015-04-05 10:21:54

标签: php regex

我在下面的表达式中使用这样的有效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

如果我输入带参数的完整网址,它就无法正常工作。请帮忙。

3 个答案:

答案 0 :(得分:1)

尝试使用此正则表达式:

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

答案 1 :(得分:0)

你的表达中有错误,你清楚地确定了你的身份。

使用此:

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

答案 2 :(得分:0)

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

所以,你必须让更多的角色。这是您的fixed regex

^(?>(?: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

A sample program

<?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);
?>