検出手順: 1. preg_replace() 関数を正規表現とともに使用して、文字列をフィルタリングし、文字列内の中国語以外の文字を削除します。構文は、"preg_replace("/[^\x{4E00}-\) です。 x{ 9FFF}] /u",'', 元の文字列)" は、すべての中国語文字を含む文字列を返します。 2. mb_strlen() 関数を使用して、フィルタリングされた文字列の長さ (中国語の文字数) を計算します。構文「mb_strlen(フィルター文字列,"utf-8")」。
このチュートリアルの動作環境: Windows 7 システム、PHP バージョン 8.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]])
パラメータの説明は次のとおりです:
- $pattern: 検索するパターン (文字列または文字列の配列)
##$replacement: 置換に使用される文字列または文字列の配列。この引数が文字列で $pattern が配列の場合、すべてのパターンがこの文字列で置き換えられます。 $pattern と $replacement が両方とも配列の場合、各 $pattern は $replacement 内の対応する要素で置き換えられます。 $replacement の要素が $pattern よりも少ない場合、余分な $pattern は空の文字列に置き換えられます。 - $subject: 検索および置換される文字列または文字列配列。$subject が配列の場合、検索および置換は $subject の各要素に対して実行され、戻り値も 1 つの配列になります。 。
- $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 文字列であり、エスケープ後は 2 になり、正規表現を通過した後は文字列とみなされます。エンジン。オリジナルのバックスラッシュ)。
置換モードで作業しており、後方参照の後に別の数値を続ける必要がある場合 (例: 一致するパターンの直後に元の数値を追加する)、構文 \\1 は使用できません。後方参照について説明します。たとえば、 \\11 を指定すると、 preg_replace() は \\1 後方参照の後に元の 1 が続くのか、それとも \\11 後方参照の後に何も続くのかを理解できなくなります。この場合の解決策は、${1}1 を使用することです。これにより、$1 の別の後方参照、つまりソース 1 の別の後方参照が作成されます。
非推奨の e 修飾子を使用する場合、この関数は一部の文字 ('、"、\、および NULL) をエスケープし、後方参照置換を実行します。これが完了するときは、参照が解析された後に必ず後方参照してください。 、一重引用符や二重引用符によって引き起こされる構文エラーはありません (例: 'strlen(\'$1\') strlen("$2")')。PHP の文字列構文に準拠し、eval 構文に準拠していることを確認してください。置換が完了すると、エンジンは eval メソッドを使用して結果の文字列を PHP コードとして評価し、戻り値を置換に参加する最終文字列として使用します。
#
mb_strlen()函数可以计算英文字符串、中文字符串或中英混合字符串的长度。
mb_strlen($str [, $encoding = mb_internal_encoding()])
mb_strlen() 函数的返回值为具有 $encoding 编码的字符串 $str 所包含的字符数,如果 $encoding 无效则返回 false。
注意:在 mb_strlen() 函数中,无论是汉字,还是英文、数字、小数点、下划线和空格,都只占一个字符长度。
推荐学习:《PHP视频教程》
以上がPHPで文字列に含まれる中国語の文字の数を検出する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。