LoginSignup
0
0

More than 1 year has passed since last update.

PHPでメールアドレスからサブドメインを除いた形のドメインを抜き出す

Last updated at Posted at 2021-09-07

以下のコードを利用することで、サブドメインを除いた形で、メールアドレスからドメインを抜き出すことができます。

※ブランドTLDは処理出来ません(ブランドTLDは別途処理方法を検討する必要があります)

<?php
function get_domain($email) {
        // メールアドレスからドメインのみ抜き出し
        $domain = preg_replace('/^.+?@(.+?)$/i', '${1}', $email);
 
        // 地域型JPドメインの抜き出し
        $pattern = '/^.*?((pref|metro|pref|city|town|vill)\..+?\.(hokkaido|aomori|iwate|miyagi|akita|yamagata|fukushima|ibaraki|tochigi|gunma|saitama|chiba|tokyo|kanagawa|niigata|toyama|ishikawa|fukui|yamanashi|nagano|gifu|shizuoka|aichi|mie|shiga|kyoto|osaka|hyogo|nara|wakayama|tottori|shimane|okayama|hiroshima|yamaguchi|tokushima|kagawa|ehime|kochi|fukuoka|saga|nagasaki|kumamoto|oita|miyazaki|kagoshima|okinawa|lg)\.jp)$/i';
        if (preg_match($pattern, $domain)) {
                return preg_replace($pattern, '${1}', $domain);
        }
 
 
        // 属性型ドメインの抜き出し
        $pattern = '/^(.*?)(\.(co|or|ne|ac|ed|ed|go|gr|lg|com|net|org|mil|edu|int|idv)\.(is|ie|az|ac|af|us|as|vi|ae|dz|ar|aw|al|am|ai|ao|ag|ad|ye|uk|gb|io|vg|il|it|iq|ir|in|id|ug|ua|uz|uy|ec|eg|ee|sz|et|er|sv|eu|au|at|ax|om|nl|gh|gg|gy|kz|qa|um|ca|cv|ga|cm|gm|kh|mk|mp|gn|gw|cy|cu|cw|gr|ki|kg|gt|gp|gu|kw|ck|gl|cx|gd|hr|ky|ke|ci|cc|cr|km|co|cg|cd|sa|gs|ws|st|bl|zm|pm|sm|mf|sl|dj|gi|je|jm|ge|sy|sg|sx|zw|ch|se|sd|sj|es|sr|lk|sk|si|sc|gq|sn|rs|kn|vc|sh|lc|so|su|sb|tc|th|kr|tw|tj|tz|cz|td|cf|cn|tn|kp|cl|tv|dk|de|tg|tk|do|dm|tt|tm|tr|to|ng|nr|na|aq|nu|ni|ne|jp|eh|nc|nz|np|nf|no|hm|bh|ht|pk|va|pa|vu|bs|pg|bm|pw|py|bb|ps|hu|bd|tl|pn|fj|ph|fi|bt|bv|pr|fo|fk|br|fr|gf|pf|tf|bg|bf|bn|bi|vn|bj|ve|by|bz|pe|be|pl|ba|bw|bq|bo|pt|hk|hn|mh|mo|mg|yt|mw|ml|mt|mq|my|im|fm|za|ss|mm|mx|mu|mr|mz|mc|mv|md|ma|mn|me|ms|jo|la|lv|lt|ly|li|lr|ro|lu|rw|ls|lb|re|ru|wf))$/i';
 
        if (preg_match($pattern, $domain)) {
                $tmp = preg_replace($pattern, '${1}', $domain);
                $tmp2 = preg_replace($pattern, '${2}', $domain);
                if (substr_count($tmp, '.') > 0) {
                        $tmp =  substr($tmp, strrpos($tmp, '.') + 1, strlen($tmp2));
                }
                return $tmp . $tmp2;
        }
 
        // その他ドメインの抜き出し
        $tmp = substr($domain, 0,  strrpos($domain, '.'));
        if (substr_count($tmp, '.') > 0) {
                $tmp = substr($tmp, strrpos($tmp, '.') + 1, strlen($tmp));
        }
        $tmp2 = substr($domain, strrpos($domain, '.'), strlen($domain));
        return $tmp . $tmp2;
 
}
0
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0