今天在開發一個關于QQ號登錄的功能時,發現獲取的QQ號昵稱中有的帶有一些特殊的字符。而這些帶有特殊字符的昵稱在其它功能中調用時會發生一些判斷錯誤,所以就寫了一個過濾的正規表達式,用來過濾昵稱中的特殊字符,只保留中文,英文以及數字。
php只保留中文,英文以及數字的正則表達式
utf8編碼表達式
/[\x{4e00}-\x{9fa5}a-zA-Z0-9]/u
非utf8編碼表達式
/[\x80-\xFF]/
PHP過濾只保留中文,英文以及數字的方法
以面已經給出的過濾規則的正則表達式,我們可以利用正則表達式編寫一個函數,用于過濾字符串中的特殊字符,只保留中文,英文以及數字三種類型的字符串。
函數如下:
<?php function match_chinese($chars,$encoding='utf8'){ $pattern =($encoding=='utf8')?'/[\x{4e00}-\x{9fa5}a-zA-Z0-9]/u':'/[\x80-\xFF]/'; preg_match_all($pattern,$chars,$result); return join('',$result[0]); } ?>
調用方法:
<?php $str = "feiniaomy.com?墨初。zblog,?#$%^&())*(&^"; echo match_chinese($str); ?>
輸出結果:
feiniaomycom墨初zblog