获取中文首字母


/**

* 获取中文首字母(中英文会返回对应的首字母,数字直接返回,若是负数,转正数返回)

* @param $str

* @param $type  true|返回大写字母  false|返回小写字母

* @return string|null

*/

function getFirstCharter($str,$type=true){

    if(empty($str)) {

        return '';

    }

    if(trim($str)==''){

        return '';

    }

    if(is_numeric($str)){

        return abs($str);

    }

    //如果不是中文 不是英文 也不是数字 直接返回 空值

    if(!preg_match("/^[\x7f-\xff]+$/", $str) && !preg_match("/^[A-Za-z]+$/",$str) && !is_numeric($str)){

        return '';

    }

    $fchar=ord($str{0});

    if($fchar>=ord('A')&&$fchar<=ord('z')) return strtoupper($str{0});

    $s1=iconv('UTF-8','gb2312',$str);

    $s2=iconv('gb2312','UTF-8',$s1);

    $s=$s2==$str?$s1:$str;

    $asc = ord($s{0})*256 + ord($s{1})-65536;

    $str = '';

    if($asc>=-20319&&$asc<=-20284){

        $str = "A";

    }

    if($asc>=-20283&&$asc<=-19776 || $asc==-9743){

        $str = "B";

    }

    if($asc>=-19775&&$asc<=-19219){

        $str = "C";

    }

    if($asc>=-19218&&$asc<=-18711 || $asc==-9767){

        $str = "D";

    }

    if($asc>=-18710&&$asc<=-18527){

        $str = "E";

    }

    if($asc>=-18526&&$asc<=-18240){

        $str = "F";

    }

    if($asc>=-18239&&$asc<=-17923){

        $str = "G";

    }

    if($asc>=-17922&&$asc<=-17418){

        $str = "H";

    }

    if($asc>=-17417&&$asc<=-16475){

        $str = 'J';

    }

    if($asc>=-16474&&$asc<=-16213){

        $str = 'K';

    }

    if($asc>=-16212&&$asc<=-15641 || $asc==-7182 || $asc==-6928 ){

        $str = 'L';

    }

    if($asc>=-15640&&$asc<=-15166){

        $str = 'M';

    }

    if($asc>=-15165&&$asc<=-14923){

        return 'N';

    }

    if($asc>=-14922&&$asc<=-14915){

        return 'O';

    }

    if($asc>=-14914&&$asc<=-14631 || $asc==-6745){

        return 'P';

    }

    if($asc>=-14630&&$asc<=-14150 || $asc==-7703){

        return 'Q';

    }

    if($asc>=-14149&&$asc<=-14091){

        return 'R';

    }

    if($asc>=-14090&&$asc<=-13319){

        return 'S';

    }

    if($asc>=-13318&&$asc<=-12839){

        return 'T';

    }

    if($asc>=-12838&&$asc<=-12557){

        return 'W';

    }

    if($asc>=-12556&&$asc<=-11848){

        return 'X';

    }

    if($asc>=-11847&&$asc<=-11056){

        return 'Y';

    }

    if($asc>=-11055&&$asc<=-10247){

        return 'Z';

    }

    if($type){

        return $str;

    }else{

        return strtolower($str);

    }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容