正则表达式
//协议头+字母数字字符串+多级+域名后缀+其他 $pattern = "/^((".$xieyi."):\/\/)([a-zA-Z0-9]+)((\.([a-zA-Z0-9]+))*)(".$houzui.")((\/([0-9a-zA-Z_]+))*)(\/?)((((\/([0-9a-zA-Z_]+))*)($page_houzui))?)$/i";
代码:类
<?php
namespace app\php;
class Link
{
//定义协议头
private static $xieyis = ['http','https'];
//定义域名后缀
private static $domain_houzui = ['.ac.cn','.ah.cn','.archi','.art','.asia','.auto','.band','.beer','.bio','.biz','.bj.cn','.black','.blue','.bond','.cab','.cafe','.cash','.cc','.center','.chat','.city','.cloud','.club','.cn','.co','.com','.com.cn','.company','.cool','.cq.cn','.cyou','.design','.email','.fan','.fans','.fashion','.fit','.fj.cn','.fun','.fund','.fyi','.games','.gd.cn','.global','.gold','.gov.cn','.green','.group','.gs.cn','.guru','.gx.cn','.gz.cn','.ha.cn','.hb.cn','.he.cn','.hi.cn','.hk','.hk.cn','.hl.cn','.hn.cn','.host','.icu','.info','.ink','.jl.cn','.js.cn','.jx.cn','.kim','.law','.life','.link','.live','.ln.cn','.lotto','.love','.ltd','.luxe','.market','.mba','.me','.media','.mo.cn','.mobi','.name','.net','.net.cn','.news','.nm.cn','.nx.cn','.online','.org','.org.cn','.organic','.pet','.pink','.plus','.poker','.press','.pro','.promo','.pub','.pw','.qh.cn','.red','.ren','.run','.s','.sale','.sc.cn','.school','.sd.cn','.sh.cn','.shop','.shopping','.show','.site','.ski','.sn.cn','.social','.space','.store','.studio','.sx.cn','.tax','.team','.tech','.technology','.tj.cn','.today','.top','.tv','.tw.cn','.uno','.video','.vin','.vip','.vote','.voto','.wang','.website','.wiki','.work','.world','.xin','.xj.cn','.xyz','.xz.cn','.yn.cn','.yoga','.zj.cn','.zone','.中国','.中文网','.企业','.佛山','.信息','.公司','.商城','.商店','.商标','.在线','.娱乐','.广东','.我爱你','.手机','.招聘','.游戏','.移动','.网址','.网店','.网站','.网络','.购物','.集团','.餐厅'];
public static $page_houzui = ['.php','.asp','.jsp','.html','.htm',];
//检查url是否合规
public static function checkUrl($url)
{
file_put_contents(app.'/tmp/domain_hz.json',json_encode(self::$domain_houzui));
//组装参数
$xieyi = '';
$houzui = '';
$page_houzui = '';
foreach (self::$xieyis as $key=>$item){
if($key===(count(self::$xieyis)-1)){
$xieyi.=preg_quote($item,'/');
}else{
$xieyi.=preg_quote($item,'/').'|';
}
}
foreach (self::$domain_houzui as $key=>$item){
if($key===(count(self::$domain_houzui)-1)){
$houzui.=preg_quote($item,'/');
}else{
$houzui.=preg_quote($item,'/').'|';
}
}
foreach (self::$page_houzui as $key=>$item){
if($key===(count(self::$page_houzui)-1)){
$page_houzui.=preg_quote($item,'/');
}else{
$page_houzui.=preg_quote($item,'/').'|';
}
}
//协议头+字母数字字符串+多级+域名后缀+其他
// $pattern = "/^((".$xieyi."):\/\/)([a-zA-Z0-9]+)((\.([a-zA-Z0-9]+))*)(".$houzui.")(\/.*)?$/i";
$pattern = "/^((".$xieyi."):\/\/)([a-zA-Z0-9]+)((\.([a-zA-Z0-9]+))*)(".$houzui.")((\/([0-9a-zA-Z_]+))*)(\/?)((((\/([0-9a-zA-Z_]+))*)($page_houzui))?)$/i";
if (preg_match($pattern, $url)) {
return true;
} else {
return false;
}
}
//获取链接域名后缀
public static function getDomainExt($url)
{
$parsedUrl = parse_url($url);
if(empty($parsedUrl['host']))
return false;
if(!in_array($parsedUrl['scheme'],self::$xieyis)){
return false;
}
$domain = $parsedUrl['host'];
if(strpos($domain,'.')===false){
return false;
}
$tmp = explode('.',$domain);
unset($tmp[0]);
$p = '';
$houzui = '';
foreach (array_reverse($tmp) as $k=>$item){
if($k===0){
$p = '.'.$item;
}else{
$p = '.'.$item.$p;
}
if(in_array($p,self::$domain_houzui))
$houzui = $p;
}
if(empty($houzui))
$houzui = false;
return $houzui;
}
//获取主域名
public static function getMainDomain($url)
{
$parsedUrl = parse_url($url);
if(empty($parsedUrl['host']))
return false;
if(!in_array($parsedUrl['scheme'],self::$xieyis)){
return false;
}
$domain = $parsedUrl['host'];
if(strpos($domain,'.')===false){
return false;
}
$tmp = explode('.',$domain);
$tmp_p = $tmp[0];
unset($tmp[0]);
$p = '';
$houzui = false;
$tmpx = [];
foreach (array_reverse($tmp) as $k=>$item){
$tmpx[]=$item;
if($k===0){
$p = '.'.$item;
}else{
$p = '.'.$item.$p;
}
if(in_array($p,self::$domain_houzui)){
$houzui = $p;
$tmpx = [];
}
}
if(empty($houzui))
$houzui = false;
if(empty($tmpx)){
$domain = $tmp_p.$houzui;
}else{
$domain = $tmpx[0].$houzui;
}
return $domain;
}
}
代码:调用
<?php
include '../conf.php';
use app\php\Link;
require_once app.'/autoload.php';
$url = "https://as1sfsdf.2adwed.com.cn/asdsdf/sdf/sdfsd/ok.php";
$status = Link::checkUrl($url);
$domain_ext = Link::getDomainExt($url);
$main_domain = Link::getMainDomain($url);
echo '链接';
var_dump($url);
echo '<hr>';
echo '链接状态';
var_dump($status);
echo '<hr>';
echo '链接域名后缀';
var_dump($domain_ext);
echo '<hr>';
echo '链接主域名';
var_dump($main_domain);
echo '<hr>';
// 20240301
// 新网 西部数码 腾讯云 阿里云 华为云 百度云 天翼云 ucloud 青云 聚名网 美橙互联
运行结果