【发布时间】:2011-08-18 04:26:53
【问题描述】:
我需要查找给定的 url 是否有效,如果它包含有 url,则应该允许它
1.通用顶级域 2.国家代码顶级域名 参考下面的网址 http://en.wikipedia.org/wiki/List_of_Internet_top-level_domains
我需要在 PHP 中执行此操作,这就是我目前正在做的事情
$regexUrl = "((https?|ftp)\:\/\/)?"; // 方案 $regexUrl .= "([a-zA-Z0-9+!*(),;?&=\$_.-]+(\:[a-zA-Z0-9+!*(),;? &=\$_.-]+)?@)?"; // 用户和通行证 $regexUrl .= "([a-zA-Z0-9-]+)\.([a-zA-Z]{2,3})"; //主机或IP $regexUrl .= "(\:[0-9]{2,5})?"; // 港口 $regexUrl .= "(\/([a-zA-Z0-9+\$_-]\.?)+)*\/?"; // 小路 $regexUrl .= "(\?[a-zA-Z+&\$_.-][a-zA-Z0-9;:@&%=+\/\$_.-]*)?"; // 获取查询 $regexUrl .= "(#[a-zA-Z_.-][a-zA-Z0-9+\$_.-]*)?"; // 锚 //if(preg_match_all("#\bhttps?://[^\s()]+(?:\([\w\d]+\)|([^[:punct:]\s]|/ ))#", $message, $matches1, PREG_PATTERN_ORDER)) //$pattern = '/((https?|ftp)\:(\/\/)|(文件\:\/{2,3}))?(((25[0-5]|2[0 -4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9] |[01]?[0-9][0-9]?))|(((([a-zA-Z0-9]+)(\.)?)+)(\.)(com|org |net|gov|mil|biz|info|mobi|name|aero|jobs|museum|[a-z]{2}))([\/][\/a-zA-Z0-9\.]*)* ([\/]?(([\?][a-zA-Z0-9]+[\=][a-zA-Z0-9\%\(\)]*)([\&][a -zA-Z0-9]+[\=][a-zA-Z0-9\%\(\)]*)*))?/'; if(preg_match_all("/$regexUrl/", $urlMessage, $matches1, PREG_PATTERN_ORDER)) { 尝试 { foreach($matches1[0] as $urlToTrim1) { $url= $urlToTrim1; 回声 $url; } } 捕获(异常 $e) { $url="-1"; } }【问题讨论】:
-
问题是 ?... 使用内置的 php 函数也可能更容易 - php.net/manual/en/function.parse-url.php