Php 通过将用户输入与字符串进行比较来验证用户输入可以吗?

Php 通过将用户输入与字符串进行比较来验证用户输入可以吗?,php,Php,用户输入应该是几个特定字符串之一 与其使用正则表达式验证用户输入,不如使用if()或switch()语句将输入与字符串进行比较 通常我会做类似的事情 $type = preg_replace('/[^\w\s\d]/', '', trim($_GET['type'])); 但是这样做可以吗 switch ($_GET['type']) { case 'test': ...code...; break; ...more cases.... default: exit; } 因此,如

用户输入应该是几个特定字符串之一

与其使用正则表达式验证用户输入,不如使用
if()
switch()
语句将输入与字符串进行比较

通常我会做类似的事情

$type = preg_replace('/[^\w\s\d]/', '', trim($_GET['type']));
但是这样做可以吗

switch ($_GET['type']) {
  case 'test': ...code...; break;
  ...more cases....
  default: exit;
}
因此,如果用户输入的表达式都不允许,它将退出

或者,
$\u GET['type']
是否可以在
switch()
语句中进行计算


谢谢。

我通常使用数组中的
来根据特定可接受值列表验证输入

if (!in_array($_GET['type'], $array_of_acceptable_values, true)) {
    // handle the error condition with exit; or whatever you decide to do
}
在我看来,与在控制结构中硬编码可接受的值相比,这有两个优点

  • 更少的代码
  • 如果需要,更新值列表更简单
  • 如果您决定从另一个源(配置文件等)加载值列表,那么很容易

我不知道你在问什么,如果你需要使用
type
的值来做某事,那么就这样做。问:如果你知道哪些可能是输入,为什么不使用select输入?如果使用字符串检查switch语句中的用户输入,则默认值将采用所有非默认值。注意区分大小写。我看那个代码没有任何问题。使用if(),else语句将执行与中的默认语句相同的操作switch@QSoto,这不是我要问的问题。(顺便说一句:接口不需要下拉列表。)我认为与字符串进行比较没有任何问题。当然,这可能是一个支持地狱在未来。当我面对这种比较时,我使用约束来方便更改和重用
开关
进行松散比较(==)用户可能会欺骗代码,使用严格比较(==)更安全至少我认为这是你要问的问题这是我想到的解决方案之一。但据我所知,当用户输入仅用于与有效字符串进行比较时,不进行清理是没有问题的?应该在此处添加严格的比较切换,还是使用松散的比较。如果输入只能是某些特定值,则在与该值列表进行比较之前,不需要对其进行清理,不管你是用这种方式还是用转换方法。@tim,谢谢,这就是我想知道的。我将使用in_数组(针、干草堆、TRUE)解决方案。