ホームページ >バックエンド開発 >PHPチュートリアル >PHP は、中国語の正規表現 (翻訳済み) の完全なコレクションであるかどうかを判断します。

PHP は、中国語の正規表現 (翻訳済み) の完全なコレクションであるかどうかを判断します。

WBOY
WBOYオリジナル
2016-06-13 13:06:48951ブラウズ

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);???

?

?

  1. //コンテンツに中国語が含まれているかどうかを判定 - GBK?(PHP)???? ??
  2. 関数 ?check_is_chinese( $s ){????? ??
  3. ???? 戻る ?preg_match( '/[x80-xff]./' 、? $s );?????? ??
  4. }????? ??
  5. ? ??
  6. //文字列の長さを取得します-GBK?(PHP)??? ??
  7. 関数 ?gb_strlen( $str ){????? ??
  8. ???? $count ?=?0;????? ??
  9. ???? ( $i =0;? $i ストレン ( $str );? $i ++){???? ??
  10. ????????? $s ?=? 部分文字列 ( $str 、? $i ,?1);?????? ??
  11. ????????? 場合 ?(preg_match( "/[x80-xff]/" 、? $s ))?++ $i ;?????? ??
  12. ????????????++ $count ;?????? ??
  13. ??????}?????? ??
  14. ???? 戻る ? $count ;?????? ??
  15. }????? ??
  16. ? ??
  17. //インターセプト文字列 string-GBK?(PHP)??? ??
  18. 関数 ?gb_substr( $str 、? $len ){????? ??
  19. ???? $count ?=?0;????? ??
  20. ???? ( $i =0;? $i ストレン ( $str );? $i ++){???? ??
  21. ????????? 場合 ( $count ?==? $len )? 休憩 ;?????? ??
  22. ????????? 場合 (preg_match( "/[x80-xff]/" 、? 部分文字列 ( $str 、? $i 、?1)))?++ $i ;?????? ??
  23. ????????????++ $count ;???????????? ??
  24. ??????}?????? ??
  25. ???? 戻る ? 部分文字列 ( $str ,?0,? $i );?????? ??
  26. }??????? ??
  27. ? ??
  28. //統計文字列の長さ-UTF8?(PHP)??? ??
  29. 関数 ?utf8_strlen( $str )?{???? ??
  30. ???? $count ?=?0;????? ??
  31. ???? ( $i ?=?0;? $i ? ストレン ( $str );? $i ++){???? ??
  32. ????????? $value ?=?ord( $str [ $i ]);??????? ??
  33. ????????? 場合 ( $value ?>?127)?{????? ??
  34. ???????????? $count ++;?????? ??
  35. ???????????? 場合 ( $value ?>=?192?&&? $value ?<=?223)? $i ++;?????? ??
  36. ???????????? エルセイフ ( $value ?>=?224?&&? $value ?<=?239)? $i ?=? $i ?+?2;????? ??
  37. ???????????? エルセイフ ( $value ?>=?240?&&? $value ?<=?247)? $i ?=? $i ?+?3;????? ??
  38. ???????????? その他 ? 死ね ( 'UTF-8 と互換性のない文字列' );?????? ??
  39. ?????????}?????? ??
  40. ????????? $count ++;?????? ??
  41. ??????}?????? ??
  42. ???? 戻る ? $count ;?????? ??
  43. }??????? ??
  44. ? ??
  45. ? ??
  46. //截取字符串-UTF8(PHP)?????? ??
  47. 関数 ?utf8_substr( $str $位置 $length ){????? ??
  48. ?????? $start_position ?=? ストレン ( $str );?????? ??
  49. ?????? $start_byte ?=?0;????? ??
  50. ?????? $end_position ?=? ストレン ( $str );?????? ??
  51. ?????? $count ?=?0;????? ??
  52. ?????? ( $i ?=?0;? $i ? ストレン ( $str );? $i ++){????? ??
  53. ????????? 場合 ( $count ?>=? $位置 ?&&? $start_position ?>? $i ){????? ??
  54. ??????????????? $start_position ?=? $i ;?????? ??
  55. ??????????????? $start_byte ?=? $count ;?????? ??
  56. ?????????}?????? ??
  57. ????????? 場合 (( $count - $start_byte )>= $length )?{?????? ??
  58. ??????????????? $end_position ?=? $i ;?????? ??
  59. ??????????????? 休憩 ;?????? ??
  60. ?????????}????????? ??
  61. ????????? $value ?=?ord( $str [ $i ]);??????? ??
  62. ????????? 場合 ( $value ?>?127){????? ??
  63. ??????????????? $count ++;?????? ??
  64. ??????????????? 場合 ( $value ?>=?192?&&? $value ?<=?223)? $i ++;?????? ??
  65. ??????????????? エルセイフ ( $value ?>=?224?&&? $value ?<=?239)? $i ?=? $i ?+?2;????? ??
  66. ??????????????? エルセイフ ( $value ?>=?240?&&? $value ?<=?247)? $i ?=? $i ?+?3;????? ??
  67. ??????????????? その他 ? 死ね ( 'UTF-8 と互換性のない文字列' );?????? ??
  68. ?????????}?????? ??
  69. ????????? $count ++;?????? ??
  70. ? ??
  71. ?????}?????? ??
  72. ?????? 戻る ( 部分文字列 ( $str $start_position $end_position - $start_position ));?????? ??
  73. }????? ??
  74. ? ??
  75. // 判断の可否は有韩文-UTF-8?(JavaScript)?????? ??
  76. 関数 ?checkKoreaChar(str)?{????? ??
  77. ?????? (i=0;?i
  78. ????????? 場合 (((str.charCodeAt(i)?>?0x3130?&&?str.charCodeAt(i)?=?0xAC00? &&?str.charCodeAt(i)?<=?0xD7A3)))?{????? ??
  79. ??????????????? 戻る ?本当;????? ??
  80. ?????????}?????? ??
  81. ?????}?????? ??
  82. ?????? 戻る ?false;????? ??
  83. }????? ??
  84. ? ??
  85. // 判断有無中文字符-GBK?(JavaScript)?????? ??
  86. 関数 ?check_chinese_char(s){????? ??
  87. ?????? 戻る ?(s.length?!=?s.replace(/[^x00-xff]/g, 「**」 ).length);?????? ??
  88. }???

?

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 "中国語は禁止";
}

?

?

?

?

?

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