验证文本字段输入数组

时间:2019-04-05 12:52:54

标签: php

我有2个文本字段,如果您按下加号按钮,它将使用jQuery生成另外2个文本字段。

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

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

HTML:

   <?php foreach($contactDetails as $details): ?>
            <div class="form-row">
                <div class="col">
                   <br>
                    <input type="text" class="form-control" placeholder="Contact Email address" name="contact_email[]" value="<?php echo htmlspecialchars($details->contact_email); ?>">
                </div>
                <div class="col">
                   <br>
                    <input type="text" class="form-control" placeholder="Contact phone number" name="contact_number[]" value="<?php echo htmlspecialchars($details->contact_number); ?>">
                </div>
            </div>
    <?php endforeach; ?>

2 个答案:

答案 0 :(得分:1)

如果您始终可以确保电子邮件和数字字段的数量相同,则可以通过以下单个循环来解决:

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

答案 1 :(得分:0)

我想它们在<form>内,所以您可以在控制器si内执行以下操作:

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

希望我了解您的问题,我会为您提供帮助。