1

私の変数$_GET['action']が取ることができる有限の値は、「新規」、「編集」、または「削除」のいずれかです。

セキュリティのために入力をサニタイズし、変数が上記の値の 1 つだけであることを確認したいのですが、正規表現を使用してそれを行うにはどうすればよいですか?

私は行って言いたくありません:

if(isset($_GET['action']) && ($_GET['action'] == 'new' || $_GET['action'] == 'edit' || $_GET['action'] == 'delete'))
4

6 に答える 6

5

これには正規表現を使用しません。ホワイト リストin_array()に対して値をチェックするために使用します。

if(!in_array($_GET, array("new", "edit", "delete"), TRUE)) {
    die('Error!');
}
于 2013-05-19T14:24:04.333 に答える
2

Aswitchがおそらく最良の解決策ですが、コードが何も表示されないため、判断が難しくなります。検索する正規表現は次のようになります

/^(new|edit|delete)$/i

単語で記述され、行頭と行末の間に 3 つの可能性のいずれかがあるかどうかをチェックします (大文字と小文字は区別されません)。

于 2013-05-19T14:21:42.060 に答える
2

それは簡単です:

if( isset($_GET['action']) && preg_match("/^(new|edit|delete)$/i", $_GET['action']))
     doSomething();
于 2013-05-19T14:23:11.850 に答える
1

これは役立つはずです

if(isset($_GET['action']) && in_array($_GET['action'], array('new', 'edit', 'delete')))

また

$allowed_methods = array('new', 'edit', 'delete');
if(isset($_GET['action']) && in_array($_GET['action'], $allowed_methods))
于 2013-05-19T14:22:06.863 に答える
1

or (|) 演算子を使用して一致させます

if (preg_match("/^(new|edit|delete)$/", $_GET['action'])) { ...
于 2013-05-19T14:22:38.570 に答える