我有一个表单,在表单中只有少数字段是必填字段。当字段不是必填字段时,它不应检查空数据验证。如果非必填字段包含数据,那么它应该检查数据,验证应该只有在数据出现时才会发生。
我的下面代码检查所有字段。例如:在下面的代码中说电话不是强制性的,如何更改代码。
$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;
}
评论这篇文章,如果不清楚的话。
提前致谢!
答案 0 :(得分:0)
如果您想检查是否已提交至少必填字段,您可以使用isset
和empty
函数检查它们是否已设置并具有真值。
例如:
if ( isset($_POST['username'], $_POST['password']) &&
! empty($_POST['username']) && ! empty($_POST['password']) ) {
// validation here
}
这将检查用户名和密码字段是否已提交并具有值,而例如,如果上述条件返回true,则不一定填写电子邮件字段。
答案 1 :(得分: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];
}
}
}
你可以尝试一下。