举例:
111.com 三位数字
jmkj.com 四位纯声母
jmkjabc.com 7位字母
xian.com 单拼
xianguang.com 两拼
a1a2.com 杂米
计算方法以跑通为主,没有做封装,需要的可以根据需求自己封装下,有更好的计算方式欢迎共同交流。
$domains = [
'111.com',
'jmkj.com',
'jmkjabc.com',
'xian.com',
'xianguang.com',
'a1a2.com',
'zhf.com',
'bpm.com'
];
foreach ( $domains as $domain){
$main_domain = explode('.', $domain);
//域名中包含两个以上小数点
//排除非顶级域名的影响
//比如 1.3e3.com 123.a.com
if (count($main_domain) != 2) {
echo "域名 {$domain} 非顶级域名"."<br />";
continue;
}
if (is_numeric($main_domain[0])) {
//纯数字
echo "域名 {$domain} 属于:" . strlen($main_domain[0]) . "位数字";
} elseif (ctype_alpha($main_domain[0])) {
//纯字母
//检查是否为纯声母
//声母
$initial_consonant = [
['b', 'p', 'm', 'f', 'd', 't', 'n', 'l', 'g', 'k', 'h', 'j', 'q', 'x', 'r', 'z', 'c', 's', 'y', 'w'],
['zh', 'ch', 'sh'],
];
$item = $main_domain[0];
$len = strlen($main_domain[0]);
$temp_arr = [];
while ($len != 0) {
$tmp_str = mb_substr($item, 0, $len);
if (isset($initial_consonant[strlen($tmp_str)-1]) && in_array($tmp_str, $initial_consonant[strlen($tmp_str)-1])) {
array_push($temp_arr, $tmp_str);
if (strlen($tmp_str) == strlen($item)){
break;
}
//清除已匹配
$item = mb_substr($item, strlen($tmp_str));
$len = strlen($item);
continue;
}
$len--;
}
if (implode('', $temp_arr) == $main_domain[0]) {
echo "域名 {$domain} 属于:". count($temp_arr) ."位纯声母". "<br />";
continue;
}
//检查是否为拼音
//韵母字典 + 三拼音节
$compound = [
['a', 'o', 'e', 'i', 'u'],
['ai', 'ei', 'ui', 'ao', 'ou', 'iu', 'ie', 've', 'er', 'an', 'en', 'in', 'un', 'vn', 'ia', 'ua', 'uo'],
['ang', 'eng', 'ing', 'ong', 'ian', 'iao', 'uai', 'uan', 'uan'],
['iang', 'iong', 'uang']
];
//组合
$list = [];
foreach ($initial_consonant as $item){
foreach ($item as $key => $value){
foreach ($compound as $row){
foreach ($row as $k => $v){
$list[strlen($value.$v)][] = $value.$v;
}
}
}
}
//进行匹配
$temp_arr = [];
$item = $main_domain[0];
$len = strlen($item);
while ($len != 0) {
$tmp_str = mb_substr($item, -$len);
if (isset($list[strlen($tmp_str)]) && in_array($tmp_str, $list[strlen($tmp_str)])) {
array_unshift($temp_arr, $tmp_str);
//清除已匹配
$item = mb_substr($item, 0, strlen($item)-$len);
$len = strlen($item);
continue;
}
$len--;
}
if (implode('', $temp_arr) == $main_domain[0]) {
echo "域名 {$domain} 属于:".count($temp_arr)."拼";
}else{
echo "域名 {$domain} 属于:".strlen($main_domain[0])."位纯字母";
}
} elseif (ctype_alnum($main_domain[0])) {
//字母+数字
echo "域名 {$domain} 属于:杂米";
}
echo "<br />";
}