PHP自帶方法驗(yàn)證郵箱是否存在
PHP校驗(yàn)郵箱地址的方法很多, 比較常用的就是自己寫正則了, 不過正則多麻煩, 我PHP自帶了方法做校驗(yàn)。
filter_var
filter_var是PHP內(nèi)置的一個(gè)變量過濾的方法, 提供了很多實(shí)用的過濾器, 可以用來校驗(yàn)整數(shù)、浮點(diǎn)數(shù)、郵箱、URL、MAC地址等。
filter_var如果返回false, 說明變量無法通過過濾器, 也就是不合法了。
$email = "lastchiliarch@163.com"; var_dump(filter_var($email, FILTER_VALIDATE_EMAIL)); $email = "asb"; var_dump(filter_var($email, FILTER_VALIDATE_EMAIL)); $email = "1@a.com"; var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));
輸出:
string(21) "lastchiliarch@163.com" bool(false) string(7) 1@a.com
對(duì)于asb這種非法郵箱格式返回了false, 但對(duì)于1@a.com則通過了,還是略有瑕疵啊。
不過一般的正則也通過會(huì)認(rèn)為1@a.com是一個(gè)合法的郵箱, 那有啥辦法可以更精準(zhǔn)的驗(yàn)證呢?
checkdnsrr
checkdnsrr其實(shí)是用來查詢指定的主機(jī)的DNS記錄的,我們可以借用它來驗(yàn)證郵箱是否存在。
對(duì)于1@a.com肯定是MX記錄不存在的。
$email = "lastchiliarch@163.com";
var_dump(checkdnsrr(array_pop(explode("@",$email)),"MX"));
$email = "1@a.com";
var_dump(checkdnsrr(array_pop(explode("@",$email)),"MX"));
輸出:
bool(true) bool(false)
可以看到, 很完美, 唯一的缺點(diǎn)就是太慢了, 畢竟是要做一次網(wǎng)絡(luò)請(qǐng)求。 所以不適合同步對(duì)大量的郵箱采用這種做法去校驗(yàn)。
filter_var+checkdnsrr
我們可以接合filter_var 和checkdnsrr做校驗(yàn), 對(duì)于絕大多數(shù)的非法郵箱肯定會(huì)在filter_var的時(shí)候就掛掉了, 剩下的再用
checkdnsrr進(jìn)一步判斷。
$email_arr = array("lastchiliarch@163.com", "1@a.com");
foreach($email_arr as $email) {
if (filter_var($email) === false) {
echo "invalid email: $email \n";
continue;
}
if(checkdnsrr(array_pop(explode("@",$email)),"MX") === false) {
echo "invalid email: $email \n";
continue;
}
}
輸出:
invalid email: 1@a.com
但要注意的是, 由于只是檢查MX記錄, 所以只能判斷163.com是存在的, 但不能說明lastchiliarch這個(gè)用戶是存在的。
想要更精確的判斷郵箱存在, 那只能連接到smtp服務(wù)器去驗(yàn)證了。
介紹了郵箱驗(yàn)證,PHP自帶方法如何驗(yàn)證郵箱、URL、IP是否合法,下面為大家介紹:
主要還是使用的是filter_var函數(shù)。
語(yǔ)法
filter_var(variable, filter, options)
variable 必需。規(guī)定要過濾的變量。
filter 可選。規(guī)定要使用的過濾器的 ID。
options 規(guī)定包含標(biāo)志/選項(xiàng)的數(shù)組。檢查每個(gè)過濾器可能的標(biāo)志和選項(xiàng)。
PHP Filters

Example #1 A filter_var() example
<?php
var_dump(filter_var('bob@example.com', FILTER_VALIDATE_EMAIL));
var_dump(filter_var('http://example.com', FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED));
?>
以上例程會(huì)輸出:
string(15) "bob@example.com" bool(false)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家進(jìn)行php郵箱驗(yàn)證有所幫助。
- php實(shí)現(xiàn)驗(yàn)證郵箱格式的代碼實(shí)例
- PHP利用緩存處理用戶注冊(cè)時(shí)的郵箱驗(yàn)證,成功后用戶數(shù)據(jù)存入數(shù)據(jù)庫(kù)操作示例
- 實(shí)例講解PHP驗(yàn)證郵箱是否合格
- PHP自帶方法驗(yàn)證郵箱、URL、IP是否合法的函數(shù)
- PHP郵箱驗(yàn)證示例教程
- php郵箱地址正則表達(dá)式驗(yàn)證
- php驗(yàn)證郵箱和ip地址最簡(jiǎn)單方法匯總
- js和php郵箱地址驗(yàn)證的實(shí)現(xiàn)方法
- php使用filter過濾器驗(yàn)證郵箱 ipv6地址 url驗(yàn)證
- PHP+Ajax異步通訊實(shí)現(xiàn)用戶名郵箱驗(yàn)證是否已注冊(cè)( 2種方法實(shí)現(xiàn))
- 通過PHP實(shí)現(xiàn)用戶注冊(cè)后郵箱驗(yàn)證激活
相關(guān)文章
基于PHP實(shí)現(xiàn)JWT登錄鑒權(quán)的示例代碼
JWT(JSON Web Token)是為了在網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開放標(biāo)準(zhǔn)。本文將為大家介紹PHP如何實(shí)現(xiàn)JWT登錄鑒權(quán),需要的可以參考一下2022-04-04
php的日期處理函數(shù)及uchome的function_coomon中日期處理函數(shù)的研究
經(jīng)常在用php的時(shí)候會(huì)碰到一個(gè)關(guān)于時(shí)間日期的問題還有時(shí)區(qū)差異的問題,以前作項(xiàng)目的時(shí)候會(huì)把時(shí)間搞錯(cuò),要么就是提前八小時(shí)了,要么那個(gè)時(shí)間就是驢唇不對(duì)馬嘴的,現(xiàn)在我就來深入研究一下這里面的各個(gè)函數(shù)及其用法2011-01-01
PHP中應(yīng)該避免使用同名變量(拆分臨時(shí)變量)
這篇文章主要介紹了PHP中應(yīng)該避免使用同名變量(拆分臨時(shí)變量),當(dāng)一個(gè)臨時(shí)變量被賦值多次時(shí),那么將其拆分成多個(gè),除非它是一個(gè)循環(huán)計(jì)數(shù)器,需要的朋友可以參考下2015-04-04
解析dedeCMS驗(yàn)證碼的實(shí)現(xiàn)代碼
本篇文章是對(duì)dedeCMS驗(yàn)證碼的實(shí)現(xiàn)代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
php中ob_flush函數(shù)和flush函數(shù)用法分析
這篇文章主要介紹了php中ob_flush函數(shù)和flush函數(shù)用法,實(shí)例分析了ob_flush函數(shù)和flush函數(shù)的功能及相關(guān)的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
php獲取網(wǎng)頁(yè)里所有圖片并存入數(shù)組的方法
這篇文章主要介紹了php獲取網(wǎng)頁(yè)里所有圖片并存入數(shù)組的方法,涉及php正則匹配及數(shù)組操作的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
PHP中單引號(hào)和雙引號(hào)的區(qū)別詳解
看好多代碼有時(shí)候用單引號(hào)或雙引號(hào)實(shí)現(xiàn)包含字符串的內(nèi)容,其實(shí)簡(jiǎn)單個(gè)概括下雙引號(hào)中的變量可以解析,單引號(hào)就是絕對(duì)的字符串,下面這篇文章主要給大家介紹了關(guān)于PHP中單引號(hào)和雙引號(hào)區(qū)別的相關(guān)資料,需要的朋友可以參考下2023-01-01

