我正在尝试创建自己的自定义验证器类,我可以检查用户提供的值的长度。我知道有很多已经创建的选项,但我正在尝试学习PHP并创建我自己的工作是我想采取的方法。
我会尝试解释我在这里做的事情,希望我不会失去任何人。我会尝试让代码尽可能地为我说话。我将首先展示我将用于获取发布信息的多维数组:
$input_array = array('username' => array( 'value'=> $_POST['username'],
'min' => 3,
'max' => 20
),
'password' => array( 'value'=> $_POST['password'],
'min' => 8,
'max' => 16
),
'email' => array( 'value'=> $_POST['email'],
'min' => 6,
'max' => 50
)
);
创建对象:
$obj = new Validate(array_map('mysql_real_escape_string',$input_array));
$vl = $obj->ValidateLength();
所以在这里我将展示课程:
class Validate
{
private $inputArray;
public function __construct($inputAray)
{
$this->inputArray = $inputArray;
}
public function ValidateLength()
{
$larray = array('error'=>'','data'=> array());
foreach($this->inputArray as $k => $i)
{
if(strlen($i['value']) < $i['min'])
{
$larray['error'] = true;
$larray['data'][$k] = ' must be at least '.$i['min'].' characters long';
}
}
return json_encode($larray);
}
}
该类的作用是检查输入值,看它是否适合我放入数组的min
和max
。如果发现错误,则将错误值更改为true,并将所有错误放入数组中以JSON格式返回。
现在我有了这个小家伙:
$length = json_decode($obj->ValidateLength(),true);
将JSON转换为另一个多维数组,如下所示:
的var_dump($长度)
array(2){
["error"]=>
bool(true)
["data"]=>
array(1){
["username"]=>
string(35)" must be at least 3 charracters long"
["password"]=>
string(35)" must be at least 8 characters long"
}
}
所以这就是出现问题的地方。我有这个条件,注意到有错误,应打印出username
和password
的错误消息:
$key = implode("\n",array_keys($length['data']));
$value = implode(", ",array_values($length['data']));
if($length['error'])
{
print("Error :\n\n".strtoupper($key).$value);
}
else
{
print('everything is within parameters');
}
我得到的是:
Error:
USERNAME
PASSWORD must be at least 3 characters long, must be at least 8 characters long
我想要的是:
Error:
USERNAME must be at least 3 characters long
PASSWORD must be at least 8 characters long
有一点需要注意的是,我试图避免使用foreach()
,如果有条件的话可以让它变得简单。同时考虑到模块化,我希望能够在第一个获取用户输入的初始数组中更改username
password
email
以与其他项目一起使用。
如果没有解释得太好,如果你迷失在我想要实现的目标,请告诉我,我会更好。提前谢谢你的外观!
答案 0 :(得分:1)
可以只将字段名称添加到错误中吗?
$larray['data'][$k] = sprintf('%s must be at least %d characters long',$k,$i['min']);
我不知道这有什么用吗?