檢測步驟:1、使用preg_replace()函數配合正規表示式過濾字串,去掉字串中的非中文字母,語法「preg_replace("/[^\x{4E00}-\x{9FFF}]+/u",'', 原字串)」,會返回包含全部中文字母的字串;2、使用mb_strlen()函數計算過濾字串的長度(中文字元的個數)即可,語法「mb_strlen(過濾字串,"utf-8")」。
php零基礎到就業直播視訊課:進入學習
API 檔案、設計、偵錯、自動化測試一體化共同作業工具:
本教學操作環境:windows7系統、PHP8.1版、DELL G3電腦
在php中,可以使用preg_replace()函數和mb_strlen()函數來檢測一個字串有幾個中文。
實現步驟:
步驟1:使用preg_replace()函數配合正規表示式過濾字串,去掉字串中的非中文字母
preg_replace()刪除原理:利用正規表示式搜尋字串中的非中文字母,並將其替換成空字元''。
<?php header("Content-type:text/html;charset=utf-8"); $str = "歡迎4546來到php這裡。zblog,我的?#$%^天呀&())*(&^"; echo "原字串:"; var_dump($str); $pattern = "/[^\x{4E00}-\x{9FFF}]+/u"; echo "過濾字串後:"; $newStr=preg_replace($pattern,'', $str); var_dump($newStr); ?>
會返回包含全部中文字母的字串
步驟2:使用mb_strlen()函數計算過濾字串的長度(中文字元的個數)
$len=mb_strlen($newStr,"utf-8"); echo "中文字元的個數:".$len;
說明:
preg_replace():
preg_replace() 函數可以執行正規表示式的搜尋和替換,是一個強大的字串替換處理常式,該函數的語法格式如下:
preg_replace($pattern, $replacement, $subject [, $limit = -1 [, &$count]])
引數說明如下:
如果 $subject 是一個陣列,preg_replace() 函數會返回一個陣列,其他情況下返回一個字串。
如果函數 preg_replace() 搜尋到匹配項,則會返回被替換後的 $subject,否則返回沒有改變的 $subject。preg_replace() 函數的每個引數(除了引數 $limit)都可以是一個陣列。如果引數 $pattern 和引數 $replacement 都是陣列,那麼該函數將以其鍵名在陣列中出現的順序來進行處理。如果發生錯誤,則返回 NULL。
引數 $replacement 中可以包含後向參照 \\n 或 $n,語法上首選後者。每個這樣的參照將被匹配到的第 n 個捕獲子組捕獲到的文字替換。n 可以是 0-99,\\0 和 $0 代表完整的模式匹配文字。
捕獲子組的序號計數方式為:代表捕獲子組的左括號從左到右,從 1 開始數。如果要在 $replacement 中使用反斜線,必須使用 4 個("\\\\" 因為這首先是 php 的字串,經過跳脫後是兩個,再經過正規表示式引擎後才被認為是一個原文反斜線)。
當在替換模式下工作並且後向參照後面緊跟著需要是另外一個數位(比如:在一個匹配模式後緊接著增加一個原文數位),不能使用 \\1 這樣的語法來描述後向參照。比如,\\11 將會使 preg_replace() 不能理解你希望的是一個 \\1 後向參照緊跟一個原文 1,還是一個 \\11 後向參照後面不跟任何東西。這種情況下解決方案是使用 ${1}1。這建立了一個獨立的 $1 後向參照,一個獨立的原文 1。
當使用被棄用的 e 修飾符時,這個函數會跳脫一些字元(即:'、"、\ 和 NULL)然後進行後向參照替換。當這些完成後請確保後向參照解析完後沒有單引號或雙引號引起的語法錯誤(比如:'strlen(\'$1\')+strlen("$2")')。確保符合 PHP 的字串語法,並且符合 eval 語法。因為在完成替換後,引擎會將結果字串作為 php 程式碼使用 eval 方式進行評估並將返回值作為最終參與替換的字串。
mb_strlen()函數
mb_strlen()函數可以計算英文字串、中文字串或中英混合字串的長度。
mb_strlen($str [, $encoding = mb_internal_encoding()])
$str 為需要計算長度的字串
$encoding 是可選引數,為字元編碼,如果省略則使用內部字元編碼。
mb_strlen() 函數的返回值為具有 $encoding 編碼的字串 $str 所包含的字元數,如果 $encoding 無效則返回 false。
注意:在 mb_strlen() 函數中,無論是漢字,還是英文、數位、小數點、下劃線和空格,都只佔一個字元長度。
推薦學習:《》
以上就是php怎麼檢測一個字串有幾個中文的詳細內容,更多請關注TW511.COM其它相關文章!