php怎麼檢測字串中是否包含中文

2022-09-22 22:00:43

檢測步驟:1、使用preg_replace()配合正規表示式過濾字串,去掉字串中的非中文字母,語法「preg_replace("/[^\x{4E00}-\x{9FFF}]+/u",'', 原字串)」,會返回一個包含全部中文字母的過濾字串;2、利用「===」判斷過濾字串是否為空字串,語法「過濾字串===''」,若等於則原字串中不包含中文,反之則原字串中包含中文。

php零基礎到就業直播視訊課:進入學習
API 檔案、設計、偵錯、自動化測試一體化共同作業工具:

本教學操作環境:windows7系統、PHP8.1版、DELL G3電腦

在php中,可以使用preg_replace()函數和「===」運運算元來檢測字串中是否包含中文。

實現步驟:

步驟1:使用preg_replace()函數配合正規表示式過濾字串,去掉字串中的非中文字母

preg_replace() 函數可以執行正規表示式的搜尋和替換;只需要利用正規表示式搜尋字串中的非中文字母,並將其替換成空字元''即可。

正規表示式為:/[^\x{4E00}-\x{9FFF}]+/u

$pattern = "/[^\x{4E00}-\x{9FFF}]+/u";
$newStr=preg_replace($pattern,'', $str);

1.png

會返回一個包含全部中文字母的過濾字串

步驟2:利用「===」運運算元判斷過濾字串是否為空字串

$newStr===''
  • 如果等於,則原字串中不包含中文

  • 如果不等於,則原字串中包含中文

實現程式碼:

function f($str){
	echo "原字串:";
	var_dump($str);
	$pattern = "/[^\x{4E00}-\x{9FFF}]+/u";
	$newStr=preg_replace($pattern,'', $str);
	if($newStr===''){
		echo "字串中不包含中文<br>";
	}else{
		echo "字串中包含中文<br>";
	}
}

呼叫上面的f($str)函數

$str1= 'TW511.COM!-=1548';
f($str1);
$str2 = "123456";
f($str2);

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 方式進行評估並將返回值作為最終參與替換的字串。

恆等式(===)運運算元

恆等式(===)運運算元是進行給定變數或值之間的嚴格比較;它比較,並檢視兩個變數(表示式或常數)是否值相等且具有相同的資料型別,即兩者都是字串或兩者都是整數等等。

如果兩個變數(表示式或常數)包含相同的值和相同的資料型別,則此運運算元返回true,否則返回false。

範例:

<?php 
header("content-type:text/html;charset=utf-8");  
// 給變數賦整數值
$x = 999; 
echo '$x='.$x."<br>"; 
// 給變數賦字串值
$y = '999'; 
echo '$y='.$y."<br>"; 
//比較$x 和$y 
if ($x === $y) 
    echo '$x和$y相等'; 
else
    echo '$x和$y不相等'; 
?>

輸出:

JDBC-vs-ODBC.jpg

說明:在上面的例子中,$ x和$ y的值相等但資料型別不同,因而返回false,執行else部分。

推薦學習:《》

以上就是php怎麼檢測字串中是否包含中文的詳細內容,更多請關注TW511.COM其它相關文章!