在 php 中过滤时误解了如何正确使用回调
Misanderstanding how to proper use callback while filtering in php
我想从 PHP 中的表单中正确检查用户数据。我正在使用过滤器 class。我需要使用回调函数来检查密码。为此,我在 twentieths 点(回调过滤器)上使用了本教程:
http://www.phpro.org/tutorials/Filtering-Data-with-PHP.html#21
但是我仍然得到这个错误:
"Warning: filter_var(): First argument is expected to be a valid callback" error.
这是我的 class :
class Callback {
private function validPasswd($sPasswd) {
$r1 = '/#[A-Z]+#/'; //at least one uppercase
$r2 = '/#[a-z]+#/'; //at least one lowercase
$r3 = '/#[!@#$%^&*()\-_=+{};:,<.>]+#/'; // at least one special char
$r4 = '/#[0-9]+#/'; //at least one number
if (preg_match($r1, $sPasswd)) {
return false;
}
if (preg_match_all($r2, $sPasswd)) {
return false;
}
if (preg_match_all($r3, $sPasswd)) {
return false;
}
if (preg_match_all($r4, $sPasswd)) {
return false;
}
if (strlen($sPasswd) < 8) {
return false;
}
return $sPasswd;
}
}
这是我方法的一部分:
public function createAccountAction() {
//get password from form to verification.
$sPasswd = $_POST['password'];
//prepare all values to be checked with a filter
$aOptions = array(
'first-name' => FILTER_SANITIZE_STRING,
'last-name' => FILTER_SANITIZE_STRING,
'login' => FILTER_SANITIZE_STRING,
'password' => array(
'filter' => FILTER_CALLBACK,
'options' => 'validPasswd'
),
'email' => FILTER_SANITIZE_EMAIL,
'conf-email' => FILTER_SANITIZE_EMAIL
);
var_dump(filter_var($sPasswd, FILTER_CALLBACK, array("options" => array("Callback"=>"validPasswd"))));
命名空间和使用是正确的。我觉得是我调用方法的方式不好。
您应该提供应调用该方法的实例和要调用的方法。
如果在Callback
中定义了createAccountAction
方法:
return filter_var($sPasswd, FILTER_CALLBACK, ["options" => [$this, "validPasswd"]]);
如果createAccountAction
方法定义在别处:
// Give Callback::validPasswd public access and...
return filter_var($sPasswd, FILTER_CALLBACK, ["options" => [new Callback, "validPasswd"]]);
我想从 PHP 中的表单中正确检查用户数据。我正在使用过滤器 class。我需要使用回调函数来检查密码。为此,我在 twentieths 点(回调过滤器)上使用了本教程: http://www.phpro.org/tutorials/Filtering-Data-with-PHP.html#21
但是我仍然得到这个错误:
"Warning: filter_var(): First argument is expected to be a valid callback" error.
这是我的 class :
class Callback {
private function validPasswd($sPasswd) {
$r1 = '/#[A-Z]+#/'; //at least one uppercase
$r2 = '/#[a-z]+#/'; //at least one lowercase
$r3 = '/#[!@#$%^&*()\-_=+{};:,<.>]+#/'; // at least one special char
$r4 = '/#[0-9]+#/'; //at least one number
if (preg_match($r1, $sPasswd)) {
return false;
}
if (preg_match_all($r2, $sPasswd)) {
return false;
}
if (preg_match_all($r3, $sPasswd)) {
return false;
}
if (preg_match_all($r4, $sPasswd)) {
return false;
}
if (strlen($sPasswd) < 8) {
return false;
}
return $sPasswd;
}
}
这是我方法的一部分:
public function createAccountAction() {
//get password from form to verification.
$sPasswd = $_POST['password'];
//prepare all values to be checked with a filter
$aOptions = array(
'first-name' => FILTER_SANITIZE_STRING,
'last-name' => FILTER_SANITIZE_STRING,
'login' => FILTER_SANITIZE_STRING,
'password' => array(
'filter' => FILTER_CALLBACK,
'options' => 'validPasswd'
),
'email' => FILTER_SANITIZE_EMAIL,
'conf-email' => FILTER_SANITIZE_EMAIL
);
var_dump(filter_var($sPasswd, FILTER_CALLBACK, array("options" => array("Callback"=>"validPasswd"))));
命名空间和使用是正确的。我觉得是我调用方法的方式不好。
您应该提供应调用该方法的实例和要调用的方法。
如果在Callback
中定义了createAccountAction
方法:
return filter_var($sPasswd, FILTER_CALLBACK, ["options" => [$this, "validPasswd"]]);
如果createAccountAction
方法定义在别处:
// Give Callback::validPasswd public access and...
return filter_var($sPasswd, FILTER_CALLBACK, ["options" => [new Callback, "validPasswd"]]);