ホームページ >バックエンド開発 >PHPチュートリアル >PHP は、中国語の正規表現 (翻訳済み) の完全なコレクションであるかどうかを判断します。
PHP は中国語の正規表現 (翻訳) かどうかを判断します
http://www.cnblogs.com/DavidYan/articles/2032115.htmlから転載??
??
php は中国語の正規表現コレクションであるかどうかを判断します
?
$str="aaa";
if(!eregi("[^x80-xff]","$str"))
{
echo "はい";
}
他
{
echo "Not";
}
?>
$str = "中国";
echo $str;
echo "
";
//if (preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/", $str)) {
// GB2312
でのみ使用可能
if (preg_match("/^[x7f-xff]+$/", $str)) { //gb2312、utf-8 と互換性があります
echo "正しく入力してください";
} else {
echo "間違った入力";
}
?>
文字列に中国語の文字が含まれているかどうかを確認したい場合は、次のコードを使用してください:
if (preg_match("/[x7f-xff]/", $string)) {
echo "中国語があります";
}その他{
echo "中国語は禁止";
}
中国語の判断はエンコードに関連しています gbk は 2 バイト、utf8 は 3 バイトです。中国語の範囲に基づいて判断できます???
?
エンコード範囲 1.GBK
(GB2312/GB18030)???
x00-xff
GBK の 2 バイトエンコード範囲???
x20-x7f
アスキー???
xa1-xff
中国語???
x80-xff 中国語??
??
2.UTF-8
(ユニコード)???
u4e00-u9fa5
(中国語)???
x3130-x318F
(韓国語???
xAC00-xD7A3
(韓国語)???
u0800-u4e00
(日本語)???
ps:
韓国語は[u9fa5]より大きい文字です???
通常の例:???
preg_replace(”/([x80-xff])/”,””,$str);??
preg_replace(”/([u4e00-u9fa5])/”,””,$str);???
?
?
UTF-8適合:
JavaScript では、文字列が中国語かどうかを判断するのは非常に簡単です。例:
var str = "phpプログラミング";
if (/^[u4e00-u9fa5]+$/.test(str)) {
alert("この文字列はすべて中国語です");
}
それ以外{
alert("この文字列はすべて中国語ではありません");
}
PHP では、x は 16 進数のデータを表すために使用されます。したがって、次のコードに変換します:
$str = "php プログラミング";
if (preg_match("/^[x4e00-x9fa5]+$/",$str)) {
print("この文字列はすべて中国語です");
} else {
print("この文字列はすべて中国語ではありません");
}
エラーは報告されず、判定結果は正しいようですが、$str を「プログラミング」という単語に置き換えると、結果は依然として「文字列がすべて中国語ではありません」と表示されます。この判定は正確ではないようです。十分。
重要: 「正規表現に精通している」を確認したところ、[x4e00-x9fa5] については、私自身が詳細な説明を作成したことがわかりました
PHPの正規表現において、[x4e00-x9fa5]は実際には文字と文字グループの概念であり、x{hex}は16進数を表し、 16 進数は 1 ~ 2 桁または 4 桁にすることができますが、4 桁の場合は中括弧
を追加する必要があることに注意してください。同時に、16 進数が x{FF} より大きい場合は、u 修飾子と一緒に使用する必要があります。そうしないと、不正なエラーが発生します。
インターネット上では全角文字に一致する正規表現しか見つかりません:??
^[x80-xff]*^/???
、中括弧
を追加する必要はありません。
[u4e00-u9fa5] は中国語と一致しますが、PHP はそれをサポートしていません???
しかし、xで表現される16進数のデータなので、jsで用意されているx4e00~x9fa5の範囲と違うのはなぜでしょうか?そこで、以下のコードに変更したところ、それが非常に正確であることがわかりました。
$str = "php プログラミング";
if (preg_match("/^[x{4e00}-x{9fa5}]+$/u",$str)) {
print("この文字列はすべて中国語です");
} else {
print("この文字列はすべて中国語ではありません");
}
PHP -/^[x{4e00}-x{9fa5}]+$/u,
で UTF-8 エンコーディングで正規表現を使用して中国語の文字と一致させるための最終的な正しい表現を知っています。
上記の記事を参考に以下のテストコードを書きました(以下のコードをコピーして.phpファイルとして保存します)
$action = trim($_GET['action']);
if($action == "サブ")
{
??? $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))??
//UTF-8 漢字英数字下線正規表現
???
{??
???????
エコー "<フォント
color=red>入力した [".$str."] には不正な文字が含まれています";??
???}
???それ以外
???{
???????
エコー "
???}
}
?>
<フォームメソッド="POST"
action="?action=sub">
入力文字(数字、文字、漢字、アンダースコア):
???
???
<入力タイプ="送信"
value="送信">
GBK:
preg_match("/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/",$str); //GB2312 漢字英数字下線正規表現
?
$str="aaa";
if(!eregi("[^x80-xff]","$str"))
{
echo "はい";
}
それ以外
{
echo "Not";
}
?>
$str = "中国";
echo $str;
echo "
";
//if (preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/", $str)) {
// GB2312
でのみ使用可能
if (preg_match("/^[x7f-xff]+$/", $str)) { //gb2312、utf-8 と互換性があります
echo "正しく入力してください";
} else {
echo "間違った入力";
}
?>
文字列に中国語の文字が含まれているかどうかを確認したい場合は、次のコードを使用してください:
if (preg_match("/[x7f-xff]/", $string)) {
echo "中国語があります";
}その他{
echo "中国語は禁止";
}
?
?
?
?
?