原文來自 Laravist 社區: https://www.codecasts.com/blo...正則表達式
一個郵件地址是否有效關係必定程度上決定了這個用戶是不是優質用戶,或者說成爲優質用戶的潛質更大。因此在用戶註冊的時候,咱們一般會絞盡腦汁來驗證一個郵箱地址的有限性。json
本文並非簡單地討論使用正則表達式來驗證一個郵箱地址是否正確,而是但願經過更多的手段來真正驗證一個郵箱地址的郵箱性
。curl
本文驗證一個郵件地址有效性的內容包含如下幾個內容:ide
最常規的正則表達式的匹配post
郵件的 DNS 有效性ui
檢驗 MX 記錄的有效性this
屏蔽一次性郵件服務商url
更多細節,好比發起發信請求code
啊哈,在這裏推薦你們能夠使用 https://www.validator.pizza 郵件驗證服務,免費,準確率還很高。具體的實現方式是經過向 validator.pizza 發起 HTTP 請求,用來驗證用戶郵箱地址是否有效,好比,普通的 PHP 代碼能夠是這個樣子:blog
$email = "666@qq.com"; // 這是一個 laravist 社區註冊的垃圾郵件 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://www.validator.pizza/email/' . $email); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $response = curl_exec($ch); curl_close($ch); var_dump($response);
或者在 Laravel 的項目當中,咱們還能夠直接擴展 Validator 來實現郵件地址有效性的驗證,在 AppServiceProvider
的 boot()
方法添加下面的代碼:
public function boot() { Validator::extend('isValid', function ($attribute, $value, $parameters, $validator) { $request = (new Client())->get('https://www.validator.pizza/email/' . $value); $body = json_decode($request->getBody()->getContents()); switch ( $body ) { case $body->status == 400: return false; case !$body->mx: return false; case $body->disposable: return false; default: return true; } }, '郵箱地址不可用'); }
而後在驗證的時候能夠這樣使用:
$this->validate(request(),['email'=>'required|isValid'])
這樣一來,基本上就能夠應付 90% 以上的郵件地址驗證,包含一次性郵件地址驗證
和有效性驗證
。