验证数组中的每个元素?

时间:2009-01-23 16:06:37

标签: php arrays validation

我目前正在尝试验证表单服务器端,它的工作方式是将所有数据放入和数组,表单字段作为键,字段数据作为值,但我需要检查所有的键都有一个与其他明智相关的值我希望提交停止并且用户必须编辑那里的细节然后重新提交,是否有快速检查我可以运行而不是将阵列拆开并检查或检查之前它被放入数组中有一个开关或丢失的if语句?

4 个答案:

答案 0 :(得分:1)

Sico87,

您不想同时测试所有字段。例如,您可能有一个联系人字段,其中包含未强制要求的电话号码输入选项,因此拒绝提交是有问题的。

在许多情况下,单独测试您的字段会更容易,因此您可以为每个字段提供所需的特殊关注。您需要特别注意电子邮件地址,并特别关注生日。

从长远来看,处理所有平等可能会导致非常严重的问题。

答案 1 :(得分:1)

function fieldEmpty($value) {
    return trim($value) == '';
}

if (count(array_filter($array, 'fieldEmpty'))) {
    die('bad');
}

答案 2 :(得分:0)

这样的东西
<?php
$arrayFilled = true;
foreach($array as $key=>$value) {
    $arrayFilled = trim($value) == '' ? false : $arrayFilled;
    if($arrayFilled === false) { break; }
}
if($arrayFilled === false) {
    echo "missing data";
}
else {
    echo "filled array";
}

你可能想检查的不只是一个空字符串,但我会把它留给你

答案 3 :(得分:0)

一种选择是两者都做。

有一个单独的字段选项数组,字段名称为键。

$fieldTypes = array('nameFirst' => 'name',
                    'nameLast'  => 'name',
                    'phone'     => 'phone',
                    'email'     => 'email');
foreach($input as $key => $value) {
    switch($fieldTypes[$key]) {
        case 'name':
            //run $value against name validation
            break;
        case 'phone':
            //run $value against phone validation
            break;
        case 'email':
            //run $value against email validation
            break;
        default:
            //code here for unknown type
    }
}

现在,它可以以多种方式使用,并且可以轻松扩展以包含诸如字段是否需要,甚至是错误消息之类的内容。将$fieldTypes数组转换为多维数组或包含数据的对象数组。

这样,如果您决定添加字段,则可能不会对验证代码进行太多更改。