【发布时间】:2011-08-04 18:43:57
【问题描述】:
我有这个正则表达式来过滤掉网址,但它也过滤掉了一些无效的网址
$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+\$_.-]*)?"; // 锚例如“http://...XYZ”也被上述正则表达式过滤,但这是无效的 url。
任何帮助将不胜感激
【问题讨论】:
-
什么是对您来说有效的 URL?你能再详细说明一下吗?哪些协议对您有效?哪些服务器名称?哪些港口?路径重要吗?授权是否有效?
-
PHP validation/regex for URL 的可能重复项
-
为什么 http://...XYZ 是一个无效的 url?并非所有域都以
www开头并以.com结尾。例如,localhost是与 www.xyz.com 一样的有效域。the、duplicate和question也是如此。