ホームページ >php教程 >php手册 >PHP正規判定中国語UTF-8&GBK

PHP正規判定中国語UTF-8&GBK

WBOY
WBOYオリジナル
2016-06-21 08:57:12958ブラウズ

UTF-8 マッチング: JavaScript では、文字列が中国語かどうかを判断するのは非常に簡単です。例: var str = "php programming";if (/^[u4e00-u9fa5]+$/.test(str)) {alert("この文字列はすべて中国語です");} else{alert("この文字列すべてが中国語であるわけではありません");} php では、...

を使用します。

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 を「プログラミング」という単語に置き換えると、結果は依然として「文字列がすべて中国語ではありません」と表示されます。この判定は正確ではないようです。十分。


インターネット上で全角文字に一致する通常のルールは ^[x80-xff]*^/
だけです。 [u4e00-u9fa5] 中国語と一致しますが、PHP はサポートしていません
また、エンコードに関連する場合もあるため、パターン修飾子の関連知識を理解する必要があります。
「パターン修飾子」に関する記事から学びました:
u (PCRE_UTF8)
この修飾子は、Perl と互換性のない PCRE の追加機能を有効にします。パターン文字列は UTF-8 として扱われます。この修飾子は、Unix では PHP 4.1.0 以降、win32 では PHP 4.2.3 以降で使用できます。
例:
preg_match('/[x{2460}-x{2468}]/u' $str); 内部コードの中国語文字と一致します

彼が提供した方法に従ってテストすると、コードは次のようになります:
$str = "php プログラミング";
if (preg_match("/^[x{2460}-x{2468}]+$/u"$str)) {
print("この文字列はすべて中国語です");
} else {
print("この文字列はすべて中国語ではありません");
}
今回も中国語かどうかの判断に誤りがあることがわかりました。
しかし、xで表現される16進数のデータなので、jsで用意されているx4e00~x9fa5の範囲と違うのはなぜでしょうか?そこで、以下のコードに変更したところ、それが非常に正確であることがわかりました。
$str = "php プログラミング";
if (preg_match("/^[x{4e00}-x{9fa5}]+$/u"$str)) {
print("この文字列はすべて中国語です");
} else {
print("この文字列はすべて中国語ではありません");
}

PHP の UTF-8 エンコーディングで正規表現を使用して中国語の文字を照合する最終的な正確な表現を知っています - /^[x{4e00}-x{9fa5}]+$/u,
上記の記事を参考に以下のテストコードを書きました(以下のコードをコピーして.phpファイルとして保存します)



入力文字(数字、文字、漢字、下線):


GBK:

preg_match("/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/"$str); //GB2312 漢字英数字下線通常式



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。