PHP で中国語の文字を一致させるために通常のルールを使用したい場合は、文字列エンコードと中国語の文字の内部コードを理解する必要があります。この方法で、中国語の文字を素早く簡単に正確に一致させることができます。
PHP で文字列が中国語かどうかを判断するには、次の考え方に従います:
コードは次のとおりです | コードをコピー |
$str = "php プログラミング"; if (preg_match("/^[u4e00-u9fa5]+$/",$str)) { print("この文字列はすべて中国語です"); } その他 { print("この文字列はすべて中国語ではありません"); } ?> |
ただし、php がそのような式をサポートしていないことがすぐにわかり、次のエラー メッセージが報告されます:
警告: preg_match() [function.preg-match]: コンパイルに失敗しました: PCRE は L、l、N、U、
または test.php の 3 行目のオフセット 3 にある u
最初はGoogleで何度も調べて、16進数のデータにPHPの正規表現を使いたかったのです
表現方法をブレークスルーして、phpでは16進数のデータを表すのにxが使われていることを知りました。それで、
次のコードに変換します:
コードは次のとおりです | コードをコピー |
$str = "phpプログラミング"; if (preg_match("/^[x4e00-x9fa5]+$/",$str)) { print("この文字列はすべて中国語です"); } その他 { print("この文字列はすべて中国語ではありません"); } |
エラーは報告されていないようで、判定結果は正しいようですが、$str を「programming」という単語に置き換えても、結果は「文字列がすべて中国語ではありません」と表示されます。
を参照してください。この判断はまだ十分正確ではありません。
中国語を正確に一致させる、つまり純粋な中国語の文字を一致させる場合、または中国語の文字と全角の句読点を一致させる場合は、エンコード環境の違いに応じて異なる方法を使用する必要があります。
以下は一般的に使用される 2 つのエンコーディング (gb2312、utf-8) です
ここに 2 つの例があります:
コードは次のとおりです | コードをコピー |
(1) ANSI プログラミング環境の場合: $strtest = "yyg 漢字 yyg"; $pregstr = "/([".chr(0xb0)."-".chr(0xf7)."][".chr(0xa1)."-".chr(0xfe)."])+/i" ; if(preg_match($pregstr,$strtest,$matchArray)){ エコー $matchArray[0]; } //出力: 漢字 (2) Utf-8 プログラミング環境の場合: $strtest = "yyg 漢字 yyg"; $pregstr = "/[x{4e00}-x{9fa5}]+/u"; if(preg_match($pregstr,$strtest,$matchArray)){ エコー $matchArray[0]; } //出力: 漢字 |