之前面试一个搞域名相关服务的公司,有一道笔试题是如何判断一个域名是否为拼音域名,即域名是拼音组成的,如baidu.com,可以是“百度”、“拜读”、“摆渡”的拼音。可以是一个字拼音、两个字拼音、三个等等。解决思路如下,我们收集出所有汉字的拼音的集合,然后循环判断域名是否在这个集合中。具体代码如下:


<?php
header("Content-Type:text/html;charset=utf-8");
error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);

$pinyinArr=array("a","ai","an","ang","ao",
"ba","bai","ban","bang","bao","be","bei","ben","beng","bi","bian","biao","bie","bin","bing","bo","bu",
"ca","cai","can","cang","cao","ce","cen","ceng","cha","chai","chan","chang","chao","che","chen","cheng","chi","chong","chou","chu","chua","chuai","chuan","chuang","chui","chun","chuo","ci","cong","cou","cu","cuan","cui","cun","cuo",
"da","dai","dan","dang","dao","de","dei","dem","den","deng","deo","di","dia","dian","diao","die","dim","ding","diu","dong","dou","du","duan","dug","dui","dun","duo",
"e","ei","en","eng","er","fa","fan","fang","fei","fen","feng","fiao","fo","fou","fu","fui",
"ga","gai","gan","gang","gao","ge","gei","gen","geng","go","gong","gongli","gou","gu","gua","guai","guan","guang","gui","gun","guo",
"ha","hai","hal","han","hang","hao","he","hei","hen","heng","ho","hong","hou","hu","hua","huai","huan","huang","hui","hun","huo",
"ji","jia","jian","jiang","jiao","jie","jin","jing","jiong","jiu","jou","ju","juan","jue","jun",
"ka","kai","kan","kang","kao","ke","ken","keng","ki","kong","kou","ku","kua","kuai","kuan","kuang","kui","kun","kuo",
"la","lai","lan","lang","lao","le","lei","leng","li","lia","lian","liang","liao","lie","lin","ling","liu","lo","long","lou","lu","luan","lue","lun","luo","lv",
"m","ma","mai","man","mang","mao","me","mei","men","meng","meo","mi","mian","miao","mie","min","ming","miu","mo","mol","mou","mu",
"na","nai","nan","nang","nao","ne","nei","nem","nen","neng","ni","nian","niang","niao","nie","nin","ning","niu","nong","nou","nu","nuan","nue","nun","nung","nuo","nv",
"o","ou",
"pa","pai","pan","pang","pao","pei","pen","peng","pi","pian","piao","pie","pin","ping","po","pou","pu","qi","qia","qian","qiang","qiao","qie","qin","qing","qiong","qiu","qu","quan","que","qun",
"ra","ran","rang","rao","re","ren","reng","ri","rong","rou","ru","ruan","rui","run","ruo",
"sa","sai","san","sang","sao","se","sei","sen","seng","seo","sha","shai","shan","shang","shao","she","shen","sheng","shi","shou","shu","shua","shuai","shuan","shuang","shui","shun","shuo","si","so","song","sou","su","suan","sui","sun","suo",
"ta","tai","tan","tang","tao","te","teng","ti","tian","tiao","tie","ting","tong","tou","tu","tuan","tui","tun","tuo",
"wa","wai","wan","wang","wei","wen","weng","wo","wu",
"xi","xia","xian","xiang","xiao","xie","xin","xing","xiong","xiu","xu","xuan","xue","xun",
"ya","yan","yang","yao","ye","yen","yi","yin","ying","yo","yong","you","yu","yuan","yue","yun",
"za","zai","zan","zang","zao","ze","zei","zen","zeng","zha","zhai","zhan","zhang","zhao","zhe","zhen","zheng","zhi","zhong","zhou","zhu","zhua","zhuai","zhuan","zhuang","zhui","zhun","zhuo","zi","zo","zong","zou","zu","zuan","zui","zun","zuo");

function checkPinyin($domain,$count=0){
    global $pinyinArr;
    
    while($domain !='' && $domain){
        $match='';
        foreach($pinyinArr as $val){
            if($domain==$val){
                $match=$val;break;
            }elseif(strpos($domain,$val) ===0){
                $match=$val;
            }
        }
        if($match==''){
            return false;
        }
        
        $domain=preg_replace('/^'.$match.'/','',$domain);
        $count++;
    }
    
    return $count;
}

//判断域名类型
function checkDomainType($domain){
    $domain=trim($domain);
    $return=array('status'=>0,'msg'=>'','type'=>array());
    
    list($domain_pre,$domain_dns)=explode('.',$domain,2);
    
    if(empty($domain_pre) || empty($domain_dns)){
        $return['msg'] ='域名错误';die;
    }
    $return['status']=1;
    $domain_pre=strtolower($domain_pre);
    $len=strlen($domain_pre);
    
    if(preg_match('/^[0-9]+$/',$domain_pre)){
        $return['type']=array(0=>array('typenum'=>1,'typestr'=>'数字域名','typestr2'=>$len.'数字域名'));
    }elseif(preg_match('/^[a-zA-Z]+$/',$domain_pre)){
        $pinyinnum=checkPinyin($domain_pre);
        if($pinyinnum){
            $return['type'][]=array('typenum'=>2,'typestr'=>'拼音域名','typestr2'=>$pinyinnum.'拼音域名');
        }
        
        if(preg_match('/[aoeiuv]/',$domain_pre)){
            $return['type'][]=array('typenum'=>3,'typestr'=>'字母域名','typestr2'=>$len.'字母域名');
        }else{
            $return['type'][]=array('typenum'=>4,'typestr'=>'声母域名','typestr2'=>$len.'声母域名');
        }
    }else{
        $return['type']=array(0=>array('typenum'=>5,'typestr'=>'杂米','typestr2'=>$len.'杂米'));
    }
    
    return $return;
}

//-----------------------------------------------------------------------
//--这块填写测试的域名
$domainArr=array(
    'pifa8.com','89.tv','baidu.com','hualongxiang.com','gxfc.net','ucc.cc','blackant.cc','szcofly.com','bjberton.com','sherut4u.net','ax657.com','592666.cc','ccbhdj.com','ayib.com','ayi.com'
);


echo '<table><tr><td>域名</td><td>结果</td></tr>';
foreach($domainArr as $val){
    $domain_info=checkDomainType($val);
    
    echo '<tr><td>'.$val.'<td>';
    if($domain_info && $domain_info['type']){
        echo '<td>';
        foreach($domain_info['type'] as $v2){
            echo $v2['typestr2'].'、';
        }
        echo '</td>';
    }else{
        echo "<td>识别错误</td>";
    }
    echo '</tr>';
}
echo '</table>';
?>
相关评论(0)
您是不是忘了说点什么?

友情提示:垃圾评论一律封号...

还没有评论,快来抢沙发吧!