在制作网站时,有时候需要对用户输入的内容进行处理,怎样单独使用正则验证输入的是否是网站还是链接还是其他呢?
$strrul = '需要验证的域名或网址';
$match1 = "/^((ht|f)tps?):\/\/([\w\-]+(\.[\w\-]+)*\/)*[\w\-]+(\.[\w\-]+)*\/?(\?([\w\-\.,@?^=%&:\/~\+#]*)+)?/";
$match2 = '/^([a-z0-9]+([a-z0-9-]*(?:[a-z0-9]+))?\.)?[a-z0-9]+([a-z0-9-]*(?:[a-z0-9]+))?(|\.org\.cn|\.org|\.net\.cn|\.gov\.cn|\.edu|\.com\.cn|\.com|\.co|\.cn|\.cc)$/i';
if(preg_match($match1, $strrul )){
echo "这是一个url链接";
}elseif(preg_match($match1, $strrul )){
echo "检测到内容为域名";
}else{
echo "其他内容";
}
?>
通过正则分别匹配链接与域名来判断指定的字符串内容的类型.
那么怎样在输入的链接中匹配出一级主域名呢?
$strurl = "需要处理的网址";
$match3 = "/[/w-]+/.(com|net|org|gov|cc|xyz|info|tv)(/.(cn))*/";//可|后缀添加新类型域名
preg_match( $match3, $strurl, $newstrarr );
if ( count( $newstrarr ) > 0 ) {
$urlname = $newstrarr[ 0 ];//如果输入内容为普通域名
} else {
$pararr = parse_url( $strurl );//parse_url函数获得url各个位置的值
$hosturl = $pararr[ "host" ];//获取域名
preg_match( $match3, $strurl, $newstrarr );
$arr = explode( ".", $hosturl );
$arrnum = count( $arr );
$arrwb = array( "com", "net", "org", "cn", "cc" );
if ( in_array( $arr[ $arrnum - 2 ], $arrwb ) ) {
$urlname = $arr[ $arrnum - 3 ] . "." . $arr[ $arrnum - 2 ] . "." . $arr[ $arrnum - 1 ];
} else {
$urlname = $arr[ $arrnum - 2 ] . "." . $arr[ $arrnum - 1 ];
}
}
echo $urlname;
?>
主要使用到php的parse_url函数,它可以将一个url链接分解为scheme、host、path、query等多个组件.
以上就是使用php代码简单的实现验证与匹配出域名的方法.