15.5.4 检查URL地址的正则表达式
本小节将讲述如何创建匹配URL地址的正则表达式。一般URL地址由以下几个部分构成。
❑协议名,通常是http
❑://
❑域名部分
❑路径文件部分,如/abc/123.html
在15.4.3小节已经使用过域名匹配的正则表达式,这小节只需完成其他部分的正则表达式即可。对于://在正则表达式中需要对字符/转义,即\/\/。另外对于整个http://部分,如果URL中不含这部分而URL的其他部分是正确的,那么这样格式的URL也应该算是合法的URL,即http://www.php.net和www.php.net都算是合法的URL。因此,该正则表达式的开头部分是:^(http:\/\/)?。
最后加上上小节对域名匹配的正则表达式,即完整的正则表达式是:/^((http:)\/\/)?[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)*.+$/。代码15-17是验证URL地址的一个完整PHP程序。
代码15-17 使用正则表达式验证URL地址的合法性15-17.php
01 <?php
02 $str_arr=array(
03 "http://www.myoosite.com",
04 "www.myoosite.com",
05 "http://www.myoosite.com/abc/123.html",
06 "//myoosite.com",
07 ":www.myoosite.com"
08 );//定义URL地址数组
09
10 $patt_url="/^(http:\/\/)?[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)*.+$/";//验证URL的正则表达式
11
12 foreach($str_arr as$str)//遍历数组
13 {
14 echo"字符串'$str':是";
15 if(preg_match($patt_url,$str))//匹配URL
16 {
17 echo"<b>合法的URL格式</b>";
18 echo"<br>";
19 echo"<br>";
20 }
21 else
22 {
23 echo"不合法的URL格式";
24 echo"<br>";
25 echo"<br>";
26 }
27 }
28 ?>
【代码解析】上述代码与代码15-16的结构完全一致,都是先建议一个字符串数组,然后创建好正则表达式,最后通过一个循环逐个检查URL地址的正确性。这段代码的执行结果如图15-19所示。