Perl CGI で携帯の 3キャリア端末を判別する方法

3キャリア判別の方法

具体的な判別は、送られてきたユーザエージェント情報を正規表現により解釈します。

どのキャリアの端末がどのような文字列を送ってくるかは、キャリアのサイトに掲載されています。
新しい端末が発売される場合があるので、プログラムを作成する時は必ず最新の情報を確認する事をお勧めします。

○iモード
http://www.nttdocomo.co.jp/service/imode/make/content/spec/useragent/index.html

○Softbank(Vodafone)
http://developers.softbankmobile.co.jp/dp/tool_dl/web/useragent.php

○EZ Web
http://www.au.kddi.com/ezfactory/tec/spec/4_4.html

3キャリア判別用正規表現のポイント

それぞれのキャリアで
・必ず含まれていて
・他のキャリアでは含まれない
部分を探して判別の基準とします。

Docomo が一番簡単で、冒頭に必ず「DoCoMo」という記載があります。

正規表現の文法で冒頭を意味する「^」を使って正規表現を構成します。

$ua =~ /^DoCoMo/ and return 'i-mode';

上記の一行は、「DoCoMo」で始まっていたら(その他の判別は必要ないので即座に)「i-mode」という文字列を返り値として関数を終了しています。

EZ Web の場合は WAP2.0 ブラウザの場合「KDDI」で始まり、HDML ブラウザの場合 「UP.Browser」で始まります。
上記コードサンプルでは2箇所に分けて記載していますが、区別する必要が無ければまとめて下記のようにも書けます。

$ua =~ /^KDDI|^UP\.Browser/ and return 'EZ Web';

Softbank の場合は、J-PHONE -> Vodafone -> Softbank という経緯があるので、これら全てに対応するには以下の3行が必要です。

$ua =~ /^Vodafone/ and return 'Softbank(旧 Vodafone 3G)';
$ua =~ /^J-PHONE/ and return 'Softbank(旧 Vodafone)';
$ua =~ /^SoftBank/ and return 'Softbank';

この場合も、まとめてよければ以下のような記載が可能です。

$ua =~ /^(?:Vodafone|J-PHONE|SoftBank)/ and return 'Softbank';