Php 验证文本字段输入数组

Php 验证文本字段输入数组,php,Php,我有两个文本字段,如果你按下加号按钮,它会用jQuery生成另外两个 对于每个集合,只有一个字段必须有一个值,即:这将通过验证: email number email number 但如果两个字段都为空,则验证将失败 我不知道如何做到这一点。我当前的验证要求两个字段都不能为空 foreach($this->contact_email as $email) { if(!filter_var($email, FILTER_VA

我有两个文本字段,如果你按下加号按钮,它会用jQuery生成另外两个

对于每个集合,只有一个字段必须有一个值,即:这将通过验证:

email        number 
email
             number
但如果两个字段都为空,则验证将失败

我不知道如何做到这一点。我当前的验证要求两个字段都不能为空

    foreach($this->contact_email as $email) {
        if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $this->errors[] = 'Invalid email address';
        }
    }



    foreach($this->contact_number as $number) {
        if(strlen($number) < 10) {
            $this->errors[] = 'Contact number should be 10 characters long';
        }
    }
foreach($this->contact_email作为$email){
如果(!filter_var($email,filter_VALIDATE_email)){
$this->errors[]=“无效的电子邮件地址”;
}
}
foreach($this->contact_number作为$number){
如果(strlen($number)<10){
$this->errors[]=“联系人号码长度应为10个字符”;
}
}
HTML:




我想它们在一个
中,因此您可以在控制器中执行以下操作:

if(!empty($_POST['email'])){
//your code here
};

希望我已经理解了您的问题,我可以帮助您。

如果您始终可以确保电子邮件和数字字段的计数相同,您可以使用如下单循环解决此问题:

foreach($this->contact_email as $index=>$email) {
    $number = $this->contact_number[$index];
    $validMail = filter_var($email, FILTER_VALIDATE_EMAIL);
    $validNumber = strlen($number) < 10;

    if ($validMail || $validNumber) {
        continue;
    }

    if(!$validMail) {
        $this->errors[] = 'Invalid email address';
    }

    if(!$validNumber) {
        $this->errors[] = 'Contact number should be 10 characters long';
    }
}
foreach($this->contact_email as$index=>$email){
$number=$this->contact_number[$index];
$validMail=filter\u var($email,filter\u VALIDATE\u email);
$validNumber=strlen($number)<10;
如果($validMail | |$validNumber){
继续;
}
如果(!$validMail){
$this->errors[]=“无效的电子邮件地址”;
}
如果(!$validNumber){
$this->errors[]=“联系人号码长度应为10个字符”;
}
}

循环其中一个字段,并使用当前循环索引/键访问另一个字段中的关联字段,然后检查这两个字段是否都为空。@04FS,如果我只循环其中一个字段,则不确定如何访问另一个字段。我想这可能是一个开始,但它只给了我电子邮件字段的键和值
foreach($key=>$val){
}`现在您获得了密钥,因此您可以使用
$this->contact\u number[$key]
@04FS访问另一个数组中的相应字段,我尝试了这个方法,但即使我填写了一个字段,仍然会在验证应该通过的地方出现验证错误
foreach($key=>this->contact\u email as$key=>val){如果(empty($val&&empty($this->contact\u number[$key])){$this->errors[]==“至少需要一个字段”;}}
empty($val&&$this->contact\u number[$key])
是胡说八道,请自己检查这两个字段。谢谢你的代码。如果我将两个字段都留空,则不会触发验证,并插入一个空行。它应该要求每行的2个字段中至少有一个有一些输入,听起来好像在创建数据库条目之前没有检查
$this->errors
的长度,因为据我所知,它应该与我提供的代码一起工作。如果这两个字段中的任何一个不是空的,它不会向errors数组中添加新字符串
foreach($this->contact_email as $index=>$email) {
    $number = $this->contact_number[$index];
    $validMail = filter_var($email, FILTER_VALIDATE_EMAIL);
    $validNumber = strlen($number) < 10;

    if ($validMail || $validNumber) {
        continue;
    }

    if(!$validMail) {
        $this->errors[] = 'Invalid email address';
    }

    if(!$validNumber) {
        $this->errors[] = 'Contact number should be 10 characters long';
    }
}