web-dev-qa-db-ja.com

電話番号[libphonenumber]からコードの国を抽出します

このような文字列があります:+33123456789(フランス語の電話番号)。国を知らずに国コード(+33)を抽出したい。たとえば、別の国から別の電話を持っている場合に動作するはずです。 Googleライブラリを使用します https://code.google.com/p/libphonenumber/

国がわかれば、国コードを見つけることができます。

PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
int countryCode = phoneUtil.getCountryCodeForRegion(locale.getCountry());

しかし、国を知らずに文字列を解析する方法を見つけられません。

69
mrroboaat

さて、私はlibphonenumberのGoogleグループ( https://groups.google.com/forum/?hl=en&fromgroups#!forum/libphonenumber-discuss )そして質問をしました。

電話番号が「+」で始まる場合、パラメータで国を設定する必要はありません。以下に例を示します。

PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
try {
    // phone must begin with '+'
    PhoneNumber numberProto = phoneUtil.parse(phone, "");
    int countryCode = numberProto.getCountryCode();
} catch (NumberParseException e) {
    System.err.println("NumberParseException was thrown: " + e.toString());
}
113
mrroboaat

ここでは、電話番号を国際形式の電話番号として保存できます

internationalFormatPhoneNumber = phoneUtil.format(givenPhoneNumber, PhoneNumberFormat.INTERNATIONAL);

国際形式+94 71 560 4888として電話番号を返します

だから今、私はこれとして国コードを取得しています

String countryCode = internationalFormatPhoneNumber.substring(0,internationalFormatPhoneNumber.indexOf('')).replace('+', ' ').trim();

これがあなたを助けることを願っています

1

クライアントの1人に同様の問題があり、電話番号のすべてが「+」で始まっていたわけではありません。ただし、電話番号の形式に基づいて国を推測することは依然として可能です。たとえば、06 XX XX XX XXはフランスの携帯電話番号のように見えます。それは何か他のものである可能性がありますが、フランス語の番号を検証し、libphonenumberが肯定的に検証できるかどうかを確認しようとしています。

また、このクライアントは、連絡先の名前である可能性のある原産国を使用して、検証を試みる国を試して優先順位を付けていました。たとえば、イタリアの名前の場合、彼らはイタリアの電話番号を検証しようとします。

その国コード検出をlibphonenumberに追加し、個人名と電話番号の形式(プレフィックス、桁数、スペース数、ダッシュや括弧がある場合など)を組み合わせた無料のAPIを作成しました。

こちらでオンラインで試すことができます https://apiphonenumber.com/

「+」で始まる数字でも機能しますが、95%の時間は他のローカルにフォーマットされた数字でも機能します。

0
Elian Carsenat

上記の1つの回答に基づいて、これを処理する便利なヘルパーメソッドを保持しました。

輸入:

import com.google.i18n.phonenumbers.NumberParseException
import com.google.i18n.phonenumbers.PhoneNumberUtil

関数:

    fun parseCountryCode( phoneNumberStr: String?): String {
        val phoneUtil = PhoneNumberUtil.getInstance()
        return try {
            // phone must begin with '+'
            val numberProto = phoneUtil.parse(phoneNumberStr, "")
            numberProto.countryCode.toString()
        } catch (e: NumberParseException) {
            ""
        }
    }
0
Ali Nawaz