元のリンク: http://blog.csdn.net/wide288/article/details/30066639
$str = "プログラミング";
// if(!preg_match("/^[x{4e00}-x{9fa5 }A-Za-z0-9_]+$/u",$str)) //UTF-8 漢字英数字下線正規表現
if(!preg_match("/^[x{4e00}-x{9fa5} ] +$/u",$str)) //UTF-8 漢字英数字下線正規表現
{ ;/font>"; }
else
{
echo "The [".$ str."] 入力した内容は完全に正当であり、合格しました!" -----------------------
UTF-8 一致:
php では、x は 16 進データを表すために使用されます。したがって、次のコードに変換されます: $str = "php programming"; if (preg_match("/^[x4e00-x9fa5]+$/",$str)) { print("この文字列はすべて中国語です" ); } else { print("文字列の一部が中国語ではありません"); どうやら $str を "programming" という単語に置き換えると、エラーは報告されなくなったようです。 、結果はまだ「文字列のすべてが中国語ではありません。中国語です。」と表示されますが、この判断はまだ十分正確ではないようです。
重要: 「正規表現に精通している」をチェックした後、[x4e00-x9fa5] については自分で説明を強化したことがわかりましたPHP の正規表現では、[x4e00-x9fa5] は実際には文字と文字グループの組み合わせです。 , x{hex} は 16 進数を表します。hex は 1 ~ 2 桁または 4 桁にすることができますが、4 桁の場合は波括弧を追加する必要があります。 x{FF} より大きい 16 進数であり、 u 修飾子と一緒に使用する必要があります。そうしないと、不正なエラーが発生します
全角文字を一致させるための通常のルールは、インターネット上でのみ見つかります: ^[x80-xff]*^/ 。ここに中括弧を追加することはできません [u4e00- u9fa5] は中国語に一致しますが、PHP ではサポートされていません。ただし、x で表される 16 進数データが、js で提供される x4e00-x9fa5 の範囲と異なるのはなぜですか?そこで、以下のコードに変更したところ、それが非常に正確であることがわかりました。 $str = "php programming" if (preg_match("/^[x{4e00}-x{9fa5}]+$/u",$str ) ) { print("この文字列はすべて中国語です"); } else { print("この文字列はすべて中国語ではありません") } PHP で UTF-8 エンコードで正規表現を使用した場合の最終結果はわかります。正しい表現 - /^[x{4e00}-x{9fa5}]+$/u。上記の記事を参照して、次のテスト コードを作成します (次のコードをコピーし、.php ファイルとして保存します)
php $action = trim($_GET['action']); if($action == "sub") { $str = $_POST['dir']; //if(!preg_match("/^[". chr(0xa1) ."-".chr(0xff)."A-Za-z0-9_]+$/",$str)) //GB2312 中国語英数字下線正規表現 if(!preg_match("/^[x {4e00} -x {9fa5} a-za-z0-9 _]+$/u "、$ str) ;/font & gt; ";} Else {echo" & lt; font color = green & gt; を入力します。 value=""
GBK:
preg_match("/^[".chr(0xa1)."-".chr( 0xff)."A-Za-z0-9_]+$/ ",$str); //GB2312 漢字英数字下線正規表現
上記では、UTF-8 の漢字正規表現をその側面も含めて紹介しましたが、PHP チュートリアルに興味のある友人に役立つことを願っています。