0

我有一个表单,表单中只有几个字段是必填的。当一个字段不是必填时,它不应该检查空数据验证。如果非必填字段包含数据,那么它应该检查数据,只有在存在的数据。

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

$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;
}

评论这个帖子,如果不清楚。

提前致谢!

4

2 回答 2

0

isset如果要检查是否至少提交了必填字段,可以使用andempty函数检查它们是否已设置并具有真值。

例如:

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

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

于 2012-06-19T10:05:20.973 回答
0

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

$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]; 
        }
    }
}

你可以试试这个。

于 2012-06-19T10:32:52.137 回答