我的变量$_GET['action']
可以采用一些有限值,“新建”、“编辑”或“删除”。
我想清理我的输入以确保安全并确保变量只是上述值之一,我该如何使用正则表达式来做到这一点?
我不想说:
if(isset($_GET['action']) && ($_GET['action'] == 'new' || $_GET['action'] == 'edit' || $_GET['action'] == 'delete'))
我的变量$_GET['action']
可以采用一些有限值,“新建”、“编辑”或“删除”。
我想清理我的输入以确保安全并确保变量只是上述值之一,我该如何使用正则表达式来做到这一点?
我不想说:
if(isset($_GET['action']) && ($_GET['action'] == 'new' || $_GET['action'] == 'edit' || $_GET['action'] == 'delete'))
我不会为此使用正则表达式。用于in_array()
根据白名单检查值:
if(!in_array($_GET, array("new", "edit", "delete"), TRUE)) {
die('Error!');
}
Aswitch
可能是最好的解决方案,但是看不到任何代码会让人很难判断。您正在搜索的正则表达式如下所示
/^(new|edit|delete)$/i
用文字描述它检查在行的开头和结尾之间是否存在三种可能性之一(不区分大小写)
这很简单,只需这样做:
if( isset($_GET['action']) && preg_match("/^(new|edit|delete)$/i", $_GET['action']))
doSomething();
这应该有帮助
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))
使用 or (|) 运算符匹配它们
if (preg_match("/^(new|edit|delete)$/", $_GET['action'])) { ...
if(isset($_GET['action'])){
switch($_GET['action']){
case 'edit':
//etc...
break;
case 'new':
//etc...
break;
case 'delete':
//etc...
break;
default:
echo 'No valid actions';
}
}
使用开关进行良好的操作管理