簡體   English   中英

使用PHP驗證表單中的電子郵件輸入

[英]Validating email input in form using PHP

我正在PHP中創建一個表單,其中包含一個名為email的字段,用戶需要在其中輸入他/她的電子郵件ID。 為了確保輸入的郵件ID在語法上是真實的(例如username_123@domain.com是有效的),我需要對其進行某種形式的驗證。 我發現情況非常模糊,因為我不知道如何檢查輸入的郵件ID是否包含@符號等。請幫助。 謝謝。 :)

最好的解決方案是:

if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
   ...
}

讓PHP為您處理繁重的工作。 否則,如果您想嚴格正確並自己直接使用正則表達式,就會陷入這種怪誕之中:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

嚴格遵守RFC2822。

首先,您需要定義有效的電子郵件

取決於此驗證對您的重要性,有不同的方法。

有些人使用瘋狂的RFC正則表達式。

另一個極端是保存用戶輸入的所有內容,然后嘗試將確認電子郵件發送到該地址。 沒有確認=錯誤的電子郵件。

您可能需要介於兩者之間:確保中間有一個@ ,例如:

$email_arr = explode('@', $email);
if (sizeof($email_arr) !== 2 || $email_arr[0] == '' || $email_arr[1] == '')
    ... // definitely not valid

UPD: Marc B用filter_var($email, FILTER_VALIDATE_EMAIL)釘上了它,這可能是最好的方法。

您可以使用正則表達式來驗證格式:

<?php  

$email = "someone@example.com";  // or perhaps $_POST['email'];

if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {   

    echo "Valid email address."; 
} 
else {   
    echo "Invalid email address."; 
}  

?> 

http://php.net/manual/zh/function.eregi.php

您可以使用jquery插件驗證表單。

http://docs.jquery.com/插件/驗證

從我自己的代碼:

if( !preg_match( "(^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$)i", $email))
    echo "E-mail address invalid";

極少數合法地址可能會失敗,例如任何@example.info ,以及任何使用不尋常字符的電子郵件地址,但在大多數情況下,此方法都可以正常工作。

暫無
暫無

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

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