簡體   English   中英

驗證來自陣列的多封電子郵件

[英]Verifying multiple emails from array

我有一個疑問,我不太確定如何使它工作

我有一個表單,最終用戶可以使用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;

現在這可以正常工作,如果電子郵件有效取決於用戶使用多少輸入,它將用$ 1 1 1 1 1 1填充$ emailcheckarray數組。

有沒有一種方法可以讓in_array僅在所有鍵與當前鍵相同的情況下工作,如果其中一個鍵為0,如果用戶輸入1個有效電子郵件,其余的無效,則仍然輸出$ emailverification為1,而我需要時其余部分無效為0。

如果在任何檢查失敗的循環過程中將驗證設置為0,則可以省略in_array 因此,從1開始,因為您還沒有失敗:

$emailverification = 1; // added
// 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;
        $emailverification = 0; // added
    }
    // Create a string for later
    $emailfields .= $email .",";
}

...,然后在循環結束時您具有正確的值。

您可以使用諸如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;
}

檢查肯定值是否為零:

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

如果沒有零,則表示它們都是零。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM