元リンク: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 漢字英数字下線正規表現 計算式
。
}
-------------------------------------
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 進数データが、で提供される x4e00 ~ x9fa5 の範囲と異なるのはなぜですか。 js?そこで、以下のコードに変更したところ、それが非常に正確であることがわかりました。 $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 漢字英数字下線正規表現
http://www.bkjia.com/PHPjc/1042014.html
www.bkjia.com