php 5.3.5 preg_match のバグ!

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-13 12:52:45858ブラウズ

php 5.3.5 preg_match BUG!!!
//環境ウィンドウ php3.35 apache2.2
今日、ユーザー名を確認するために正規表現を使用するように書いていたところ、中国語と英語の両方で問題はありませんでした

ただし、この単語で登録する場合は問題ありません

echo preg_match("/['" ]/","NET");

// ファイルは utf-8 であり、header("Content-type:text/html;charset=utf-8");
も設定されています

通常の状況では 0 が出力されるはずですが、実際には 1 が出力されます。試してみてください。

そしてこの問題を解決する方法!

php 正規表現 レギュラー 定期
-----解決策--------------------------------
バグがあっても不思議ではありません。このため、php では 5.3.22 または 5.4.12 にアップグレードすることをお勧めします

しかし、あなたが指摘したバグは存在しません
通常のルール文字列の [] は 1 文字のリストですが、全角スペースは複数文字の
です。 少なくとも u 修飾子
が必要です echo preg_match("/['" ]/u","NET");

------解決策------ - ----
問題は ['" ] です。最後の空白はマルチバイト文字です
「net」という単語のエンコードは「net
」です。 これら 2 つの間には 80 の重複があるため、同じバイトが一致します
-----解決策----------- ----- ----
引用:
問題は ['" ] です。最後の空白はマルチバイト文字です
「net」という単語のエンコードは「net
」です。 これら 2 つの間には 80 回の繰り返しがあるため、同じバイトが一致します


1
Unicode 修飾子を追加せずにバイト単位で一致します
それでは、ビンゴ!
-----解決策---------
引用:
Baidu で検索した結果、貪欲モードになった理由を説明していただけますか。

そして、なぜ「ネット」以外の漢字には間違いがないのでしょうか?

あなたは間違っている! U は貪欲モードスイッチ
u は utf-8 修正モードです。このモードでは、utf-8 文字はすべてバイト
として扱われます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。