1

我的变量$_GET['action']可以采用一些有限值,“新建”、“编辑”或“删除”。

我想清理我的输入以确保安全并确保变量只是上述值之一,我该如何使用正则表达式来做到这一点?

我不想说:

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

用文字描述它检查在行的开头和结尾之间是否存在三种可能性之一(不区分大小写)

于 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 回答
1
if(isset($_GET['action'])){
  switch($_GET['action']){
    case 'edit':
        //etc...
        break;
    case 'new':
        //etc...
        break;
    case 'delete':
        //etc...
        break;
    default:
        echo 'No valid actions';
  }
}

使用开关进行良好的操作管理

于 2013-05-19T14:29:27.250 回答