Php 如何根据预期类型检查数据有效性?
我需要根据HTTP请求(通常来自$\u POST和$\u GET)的相关预期类型验证从HTTP请求接收到的一些值 以下是如何定义可能的参数:Php 如何根据预期类型检查数据有效性?,php,validation,Php,Validation,我需要根据HTTP请求(通常来自$\u POST和$\u GET)的相关预期类型验证从HTTP请求接收到的一些值 以下是如何定义可能的参数: $defs = [ 'op' => [ 'type' => 'string' ], 'out' => [ 'type' => 'integer'], 'throttle' => [ 'type' => 'double'] ]; PHP提供了filter_var()函数,该函数实际上对值进行清理,
$defs = [
'op' => [ 'type' => 'string' ],
'out' => [ 'type' => 'integer'],
'throttle' => [ 'type' => 'double']
];
PHP提供了filter_var()函数,该函数实际上对值进行清理,但不判断格式是否有效
是否有其他方法可以实现这一点,而不必为每种可能的类型(字符串、布尔值、整数、浮点值、双精度、数组)编写正则表达式?更好地使用
filter\u var
函数。这里的文档:当您只想检查某物的类型时,PHP中有两种方法。您可以使用
gettype
函数(参见示例)或is\u TYPE
函数(TYPE是占位符)。在这里您可以看到is_类型函数的完整列表
编辑
由于我不太可能有时间进一步开发我的库,我将提供另一个库供使用。(R/V)有很多功能可供使用,现在可以使用了;也就是说,这项工作不像我的工作那样在进行中 这里是相同的工作示例,但使用R/V
use Respect\Validation\Validator as v;
// these are from your POST, I think
$op = "test";
$out = 10.5;
$throttle = 10.5;
$defs = [
"op" => ["type" => "string"],
"out" => ["type" => "integer"],
"throttle" => ["type" => "double"]
];
foreach ($defs as $name => $settings) {
if (v::type($settings["type"])->validate($$name)) {
echo "<p><i>$name</i> is okay</p>";
} else {
echo "<p><i>$name</i> is <b>not</b> okay</p>";
}
}
在上面的示例中,捕获错误。R/V使用getMessages
返回所有错误的数组。我用它来迭代并打印它们
原始答案如下 我创建了一个WIP库: 实例 如果我正确理解了这个问题,那么您可以这样使用它:
$v = new Validator();
// these are from your POST, I think
$op = "test";
$out = 10.5;
$throttle = 10.5;
$defs = [
"op" => ["type" => "string"],
"out" => ["type" => "integer"],
"throttle" => ["type" => "double"]
];
foreach ($defs as $name => $settings) {
if ($v->clearErrors()->setDataType($settings["type"])->validate($$name)) {
echo "<p><i>$name</i> is okay</p>";
} else {
echo "<p><i>$name</i> is <b>not</b> okay</p>";
}
}
你可以阅读更多关于这本书的内容
在failed if语句中可以访问错误。例如,您可以调用$v->error
,$v->errno
,或$v->errorList
,分别检索最后一个错误、错误号或所有错误
免责声明
库中还提供了一些其他选项。请注意,它是WIP,因此可能存在一些问题
我还将在某个时间点创建自述文件…因此,您的意思是有必要为每个预期类型选择适当的筛选器。此外,您还可以使用
preg\u match
验证如果有人已经实现了这一点,他能提供一个示例吗?谢谢
foreach ($defs as $name => $settings) {
try {
v::type($settings["type"])->assert($$name);
echo "<p>No problem</p>";
} catch (Respect\Validation\Exceptions\ExceptionInterface $ex) {
foreach ($ex->getMessages() as $error) {
echo "<p>$error</p>";
}
}
}
$v = new Validator();
// these are from your POST, I think
$op = "test";
$out = 10.5;
$throttle = 10.5;
$defs = [
"op" => ["type" => "string"],
"out" => ["type" => "integer"],
"throttle" => ["type" => "double"]
];
foreach ($defs as $name => $settings) {
if ($v->clearErrors()->setDataType($settings["type"])->validate($$name)) {
echo "<p><i>$name</i> is okay</p>";
} else {
echo "<p><i>$name</i> is <b>not</b> okay</p>";
}
}
$$name;
$op; // outputs "test"