php怎麼檢測一個字串有幾個中文

2022-09-22 22:00:49

檢測步驟: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);
?>

會返回包含全部中文字母的字串

1.png

步驟2:使用mb_strlen()函數計算過濾字串的長度(中文字元的個數)

$len=mb_strlen($newStr,"utf-8");
echo "中文字元的個數:".$len;

2.png

說明:

preg_replace():

preg_replace() 函數可以執行正規表示式的搜尋和替換,是一個強大的字串替換處理常式,該函數的語法格式如下:

preg_replace($pattern, $replacement, $subject [, $limit = -1 [, &$count]])

引數說明如下:

  • $pattern:要搜尋的模式,可以使一個字串或字串陣列;
  • $replacement:用於替換的字串或字串陣列。如果這個引數是一個字串,並且 $pattern 是一個陣列,那麼所有的模式都使用這個字串進行替換。如果 $pattern 和 $replacement 都是陣列,每個 $pattern 使用 $replacement 中對應的元素進行替換。如果 $replacement 中的元素比 $pattern 中的少,多出來的 $pattern 使用空字串進行替換。
  • $subject:要進行搜尋和替換的字串或字串陣列,如果 $subject 是一個陣列,搜尋和替換回在 $subject 的每一個元素上進行, 並且返回值也會是一個陣列。
  • $limit:可選引數,每個模式在每個 $subject 上進行替換的最大次數。預設是 -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其它相關文章!