验证来自阵列

时间:2016-01-08 22:37:32

标签: php arrays

我有一个查询,我不太确定如何让它工作

我有一个表单,最终用户可以使用jquery添加多个电子邮件字段,并将每个文本输入放入数组

我创建了一些代码来验证每个数组键并使用数字填充数组以进行验证

以下是验证POST的代码:

// Collect and verify attached email
if(isset($_POST["email"])){

    // set var for collecting email and store as null
    $emailfields ="";

    // start verify loop
    foreach($_POST["email"] as $key => $email)
    {
        // Filter var email to comfirm it is an email
        $email = filter_var($email, FILTER_SANITIZE_EMAIL);
         if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false)
        {
            $emailcheckarray[] = 1;
        } else {
            $emailcheckarray[] = 0;
        }
            // Create a string for later
            $emailfields .= $email .",";

        }

    // Verify Array contains value
    if (!in_array('1', $emailcheckarray, true)) 
    {
    $emailverification = 1;
    } else {
    $emailverification = 0;
    }    
}

echo $emailfields;
echo $emailverification;

现在,如果电子邮件有效,则根据用户使用的输入数量填充数组$ emailcheckarray 1 1 1 1 1。

有没有一种方法可以让in_array只能使用与当前相同的所有键,如果其中一个键为0,如果用户输入1个有效的电子邮件,则仍然会将$ emailverification输出为1,其余时间无效我希望它为0。

3 个答案:

答案 0 :(得分:2)

如果在任何检查失败的循环期间将验证设置为0,则可以省略 <div efp-loading-indicator ={{vm.isLoading}}> <select> </select> </div 。因此,当你没有失败时,请从值1开始:

in_array

...然后在循环结束时你有正确的值。

答案 1 :(得分:1)

您可以使用array_maparray_filter等功能获取所有有效电子邮件的数组。

if (isset($_POST['email'])) {
    $sanitized_emails = array_map(function ($email) {
        return filter_var($email, FILTER_SANITIZE_EMAIL);
    }, $_POST['email']);
    $valid_emails = array_filter($sanitized_emails, function($email) {
        return filter_var($email, FILTER_VALIDATE_EMAIL);
    });
    $emailfields = implode(',', $sanitized_emails);
}

然后你只需要比较两个标签的大小。

$emailverification = 0;
if (count($emails) == count($valid_emails)) {
    $emailverification = 1;
}

答案 2 :(得分:0)

检查肯定为零:

if (in_array('0', $emailcheckarray, true)) {
    $emailverification = 0;
} else {
    $emailverification = 1;
}

如果你没有任何零,那就意味着他们都是零。