在 PHP 中驗證電子郵件

Subodh Poudel 2023年1月30日
  1. 在 PHP 中使用 filter_var() 函式和 FILTER_VALIDATE_EMAIL 驗證電子郵件
  2. 在 PHP 中使用 FILTER_VALIDATE_EMAILFILTER_SANITIZE_EMAILfilter_var() 函式驗證電子郵件
  3. 使用 preg_match() 函式根據正規表示式驗證電子郵件
在 PHP 中驗證電子郵件

我們將介紹一種使用 filter_var() 函式和 FILTER_VALIDATE_EMAIL 過濾器名稱 ID 在 PHP 中驗證電子郵件地址的方法。filter_var() 函式將電子郵件作為第一個引數和過濾器名稱 FILTER_VALIDATE_EMAIL 以根據 RFC 822 中的語法驗證電子郵件。此方法檢查有效的電子郵件格式而不是有效的電子郵件。

我們還將演示另一種使用 FILTER_SANITIZE_EMAILFILTER_VALIDATE_EMAIL 過濾器名稱 ID 以及 fiter_var() 函式在 PHP 中驗證電子郵件地址的方法。此方法首先清理電子郵件地址,然後驗證電子郵件地址。

我們將介紹另一種使用正規表示式在 PHP 中驗證電子郵件的方法。此方法使用 preg_match() 函式根據提供的正規表示式檢查電子郵件是否有效。

在 PHP 中使用 filter_var() 函式和 FILTER_VALIDATE_EMAIL 驗證電子郵件

我們可以使用 filter_var() 函式來過濾具有特定過濾器名稱的變數。FILTER_VALIDATE_EMAIL 過濾器名稱指定電子郵件需要驗證。該函式將電子郵件地址作為字串作為第一個引數,將上面指定的過濾器 ID 作為第二個引數。因此,我們可以檢查提供的電子郵件是否有效。如果函式成功或返回 false,則函式返回過濾後的資料。電子郵件被稱為有效,而不是電子郵件存在的意義。過濾器 id 根據 RFC 822 中的語法驗證電子郵件。我們可以使用有效和無效的電子郵件來測試電子郵件的驗證。

例如,建立一個函式 validateEmail(),它接受一個引數 $email。對 $email 變數使用 filter_var() 函式,並指定過濾器 ID FILTER_VALIDATE_EMAIL 作為第二個引數。對 filter_var() 函式應用 if-else 條件。在 if 塊中,顯示訊息說電子郵件有效,在 else 條件下,顯示該電子郵件無效。在函式外,呼叫該函式兩次。在第一個函式呼叫中提供引數,peter.piper@iana.orgfirst.last@example.123
在第二次通話中。

我們可以假設示例中提供的電子郵件地址是使用 $_POST 變數從表單訪問的。下面示例中的函式被呼叫兩次。第一個呼叫傳遞一個有效的電子郵件地址,第二個地址傳遞一個無效的電子郵件。第二個電子郵件地址無效,因為它包含頂級域中的數字。結果是顯而易見的。

示例程式碼:

#php 7.x
<?php
function validateEmail($email) {
    if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
        echo "{$email}: A valid email"."<br>";
    }
    else {
        echo "{$email}: Not a valid email"."<br>";
    }
}
validateEmail('peter.piper@iana.org');
validateEmail('first.last@example.123');
?>

輸出:

phppeter.piper@iana.org: A valid email 
first.last@example.123:Not a valid email

在 PHP 中使用 FILTER_VALIDATE_EMAILFILTER_SANITIZE_EMAILfilter_var() 函式驗證電子郵件

我們可以在第一種方法中使用附加的 FILTER_SANITIZE_EMAIL 過濾器名稱 id 從電子郵件地址中刪除所有非法字元。過濾器名稱 id 是 filter_var() 函式中的第二個引數,其中電子郵件地址是第一個引數。該函式返回經過消毒的電子郵件。我們可以再次使用該功能來檢查消毒後電子郵件地址的有效性。為此,我們可以使用 FILTER_VALIDATE_EMAIL 過濾器名稱 id 來遵循第一種方法。

例如,建立一個變數 $email 並儲存一個包含非法字元的電子郵件地址。將電子郵件 ram(.mugu)@exa//mple.org 作為字串儲存在變數中。對變數使用 filter_var() 函式,並使用 FILTER_SANITIZE_EMAIL id 作為第二個引數。將函式儲存在同一個 $email 變數中。然後,像第一種方法一樣應用 if-else 語句。這一次,使用 FILTER_VALIDATE_EMAIL 電子郵件作為函式中的過濾器名稱。同樣,顯示訊息。

在下面的示例中採用了帶有非法字元的電子郵件地址,filter_var() 函式過濾這些字元並清理所提供的電子郵件。示例中提供的電子郵件地址包含非法字元,例如 ()//。該函式首先從電子郵件中刪除這些字元,然後驗證電子郵件。

示例程式碼:

#php 7.x
<?php
$email = "ram(.mugu)@exa//mple.org";
$email = filter_var($email, FILTER_SANITIZE_EMAIL);
if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
    echo "{$email}: A valid email"."<br>";
}
else{
    echo "{$email}:Not a valid email"."<br>";
}
?>

輸出:

ram.mugu@example.org: A valid email

使用 preg_match() 函式根據正規表示式驗證電子郵件

我們可以使用 preg_match() 函式來驗證 PHP 中的電子郵件地址。此方法使用正規表示式作為電子郵件的驗證規則。我們可以自己建立正規表示式並定義有效電子郵件的規則。preg_match() 函式接受兩個引數,其中第一個是正規表示式,第二個是要檢查的電子郵件。我們可以使用三元運算子和函式一起檢查電子郵件的有效性。

例如,建立兩個變數 $email_first$email_secon,並在這些變數中儲存兩個電子郵件地址。首先儲存有效的電子郵件 firstlast11@gmail.com,然後儲存無效的電子郵件 firstlast@11gmail,com。編寫一個帶有一個引數的函式 validateEmail()。命名引數 $email。在函式內部,在 $regex 變數中編寫一個正規表示式,如示例程式碼所示。然後編寫一個三元運算子,其中要檢查的條件是 preg_match() 函式。將 $regex 作為第一個引數,將 $email 作為第二個引數。當條件為真時列印電子郵件有效的訊息,當條件為假時列印電子郵件無效的訊息。回顯整個三元表示式。在函式外,呼叫 validateEmail() 函式兩次。在第一個函式呼叫中使用 $email_first 變數,在第二個函式呼叫中使用 $email_second 變數。

在下面的示例中,我們編寫了一個正規表示式,用於建立驗證電子郵件的規則。有效的電子郵件包含收件人姓名、@ 符號、域和頂級域。上面建立的正規表示式接受收件人姓名作為字母數字值。字母表由大寫字母和小寫字母組成。它也接受一個句點。電子郵件必須有 @ 符號。該域僅包含字母。然後電子郵件應該有一個句點。頂級域應該只由字母組成,並且長度應該是兩個或三個。正規表示式是基於此規則建立的。第一封電子郵件是有效的,因為它滿足所有規則,但第二封電子郵件無效。無效,因為域名中有數字,頂級域名前沒有句號。

示例程式碼:

# php 7.x
<?php
$email_first = 'firstlast11@gmail.com';
$email_second ='firstlast@11gmail,com';
function validateEmail($email) {
    $regex = "/^([a-zA-Z0-9\.]+@+[a-zA-Z]+(\.)+[a-zA-Z]{2,3})$/";
    echo preg_match($regex, $email) ? "The email is valid"."<br>" :"The email is       not valid";
}
validateEmail($email_first);
validateEmail($email_second);
?>

輸出:

The email is valid 
The email is not valid
作者: Subodh Poudel
Subodh Poudel avatar Subodh Poudel avatar

Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.

LinkedIn

相關文章 - PHP Email