PHP-在某些字段上验证

PHP-在某些字段上验证,php,Php,我有一个表单,表单中只有少数字段是必填字段。如果字段不是必填字段,则不应检查空数据验证。如果非必填字段包含数据,则应检查数据,仅当数据存在时才应进行验证 我的以下代码检查所有字段。例如:假设电话在以下代码中不是强制性的,如何更改代码 $validate = array( array($x, '/^[a-z\d ]{4,20}$/i', "Please enter valid name."), array($y, '/^[a-z\d ]{4,20}$/i', "Please ent

我有一个表单,表单中只有少数字段是必填字段。如果字段不是必填字段,则不应检查空数据验证。如果非必填字段包含数据,则应检查数据,仅当数据存在时才应进行验证

我的以下代码检查所有字段。例如:假设电话在以下代码中不是强制性的,如何更改代码

$validate = array(
    array($x, '/^[a-z\d ]{4,20}$/i', "Please enter valid name."),
    array($y, '/^[a-z\d ]{4,20}$/i', "Please enter a real category."),
    array($phone, '/^\(?[0-9]{3}\)?|[0-9]{3}[-. ]? [0-9]{3}[-. ]?[0-9]{4}$/' , "Please enter a valid phone number")
);

$error = '';
foreach ($validate as $validation)
{
    if (!preg_match($validation[1],$validation[0]))
    {
       $error .= $validation[2]; 
    }
}

if($error != '')
{
    echo $error;
    exit;
}
如果不清楚,请对此帖子发表评论


提前谢谢

如果要检查是否至少提交了必填字段,可以使用
isset
empty
功能检查这些字段是否已设置并具有真实值

例如:

if ( isset($_POST['username'], $_POST['password']) && 
     ! empty($_POST['username']) && ! empty($_POST['password']) ) {
    // validation here
}

这将检查用户名和密码字段是否已提交并具有值,而例如电子邮件字段不一定已填写,上述条件才会返回true。

如果您事先知道必填字段,我建议您将它们分组在一个数组中,并根据当前密钥进行测试。如果密钥不是强制的,但具有值,则可以进行测试,否则请进行定期检查

$error = '';
$mandatoryFields = array('key1', 'key2' 'key3');

foreach ($validate as $validation)
{
    if (!in_array($validation[0], $mandatoryFields) && strlen(trim($validation[0])) > 0) 
    {
        // There is data in a non mandatory field.
        // Perform your test.
    } 
    else {
        // Do your regular test.
        if (!preg_match($validation[1],$validation[0]))
        {
           $error .= $validation[2]; 
        }
    }
}

您可以试一试。

:在我上面的代码中,如果用户输入数据,您希望在非必填字段上进行验证。您能告诉我,我是如何做到的吗?您可以使用完全相同的逻辑。在我提供的代码块中,检查例如$_POST['phone']是否已设置并具有值,并相应地处理验证。注意:您不清楚我正在查找的内容。表单有一些非必填字段。如果用户输入数据,我应该执行验证。是否清晰。我完全知道您的意思。我提供给你的逻辑正是你想要的。就像我上面所做的那样,您可以执行类似于
if(isset($\u POST['phone'])和&!empty($\u POST['phone']))
的操作,并在返回true时执行验证,即,如果电话字段已填充。如果未填写,则条件将返回false,表示不需要验证。如果已填写,则必须验证。