Laravelになかったので「Freemail」というフリーメールかどうかを判定するRailsのライブラリを参考に自作してみた。
環境
Laravel v9.5.1 (PHP v8.1.3)
実装
- フリーメールのドメインを配列で返すよう
FreeEmail
モデルで定義
オブジェクト指向の観点からするとクラスにするまでもないが、まあよしとする。
app/Models/FreeEmail.php
class FreeEmail
{
public static function list(): array
{
return [
"0-mail.com",
"027168.com",
...
]
}
}
- Emailクラスに、emailからドメインを取る
fqdn
関数とフリーメールかどうか判定するisFreeEmail
関数を定義
app/Models/Email.php
class Email
{
private $email;
public function __construct(string $email)
{
$this->email = $email;
}
public function fqdn(): string
{
return substr($this->email, strrpos($this->email, '@') + 1);
}
public function isFreeEmail(): bool
{
return in_array($this->fqdn(), FreeEmail::list());
}
}
使い方
$email = 'aaa@gmail.com';
$email->fqdn();
// => "gmail.com"
$email->isFreeEmail();
// => true
参考