永田順伸のブログ

Net_UserAgent_Mobile_Error::isDoCoMo()

携帯端末を機種ごとに処理を振り分けるときに便利に利用できるのがPearのNet_UserAgent_Mobileクラスです。
お客様の携帯サイトで利用したことがあるのですが、最近、別の用件でお客様のサイトを確認したところ、
Fatal error: Call to undefined method Net_UserAgent_Mobile_Error::isDoCoMo() というエラーが発生しました。
確認はFireFoxのUser Agent Switcherを利用します。
何度か試している内に端末製造番号付きのときにエラーが発生することに気付きました。

製造番号なし
DoCoMo/2.0 SH901iC(c100;TB;W24H12)

製造番号付き
DoCoMo/2.0 SH901iC(c100;TB;W24H12;ser123456789012345;icc123456789012345)

となると、正規表現が実際の製造番号にマッチできない可能性が大です。
さっそく製造番号をパターンマッチで取得する部分を確認すると
[php]
if (preg_match(‘/^icc(\w{20})?$/’, $value, $matches)) {
[/php]
と、固定されています。
15文字のところが正規表現では20文字で固定されているためこの部分のデータが取得できずにエラーが表示されていたようです。
ここは15文字で固定せずに、
[php]
if (preg_match(‘/^icc(\w{15,20})?$/’, $value, $matches)) {
[/php]

15文字から20文字までと幅を持たせるように修正したところ正常動作するようになりました。

モバイルバージョンを終了