2012年2月17日

[PHP-users 35670] Re:正規表現が有効であるかの判定

小林です。

菊澤さん
> preg_matchに間違った正規表現パターンを入れるとW_WARNINGが発生します。
> そのエラーをハンドリングしてやればいいと思います。
>
> function error_handler($errno, $errstr, $errfile, $errline)
> {

> global $preg_pattern_error;
> $preg_pattern_error = true;
> }
>
> $pattern = webからの入力文字列;
> $preg_pattern_error = false;
> set_error_handler("error_handler", E_WARNING);
> @preg_match('/' . $pattern . '/', "");
> restore_error_handler();
>
> if ($preg_pattern_error) {
> // 間違った正規表現パターンです。
> } else {
> // 正しい正規表現パターンです。
> }

小山さん
> そんなことをしなくても、正規表現の文法が間違っていれば preg_match が false を
> 返すので、それをチェックすれば良いのではないでしょうか?
>
> $result = @preg_match($regex, '');
> if ($result === false) {
> // $regex は正規表現として誤りです
> }

なるほどBOOL型指定で判定すれば良いのですね。
いつもおおざっぱに if($result) で判定していたので
非マッチとエラーの区別が付くことが頭にありませんでした。
「@」を使えば出力にWARNINGも出ませんしこれでうまくいきそうです。

今回は戻り値の判定でうまくいきそうですが
エラーハンドリングについても php 全般として
いろいろ応用が利きそうなので頭に入れておきます。

アドバイスありがとうございました!

--
kobayashi <kobayan.ml@xxxxx>
_______________________________________________
PHP-users mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3


投稿者 xml-rpc : 2012年2月17日 10:09
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/109040
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。