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 の重複があるため、同じバイトが一致します
-----解決策----------- ----- ----
1
Unicode 修飾子を追加せずにバイト単位で一致します
それでは、ビンゴ!
-----解決策---------
あなたは間違っている! U は貪欲モードスイッチ
u は utf-8 修正モードです。このモードでは、utf-8 文字はすべてバイト
として扱われます。