it-swarm.com.de

Ländercode aus der Telefonnummer extrahieren [libphonenumber]

Ich habe eine Zeichenfolge wie diese: +33123456789 (französische Telefonnummer). Ich möchte den Ländercode (+33) extrahieren, ohne das Land zu kennen. Zum Beispiel sollte es funktionieren, wenn ich ein anderes Telefon aus einem anderen Land habe. Ich benutze die Google-Bibliothek https://code.google.com/p/libphonenumber/ .

Wenn ich das Land kenne, ist es cool, die Landesvorwahl zu finden:

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

aber ich finde keinen Weg, eine Zeichenfolge zu analysieren, ohne das Land zu kennen.

69
mrroboaat

Okay, also bin ich der Google-Gruppe von libphonenumber ( https://groups.google.com/forum/?hl=de&fromgroups#!forum/libphonenumber-discuss beigetreten und habe nach einem gefragt Frage.

Ich muss das Land nicht im Parameter einstellen, wenn meine Telefonnummer mit "+" beginnt. Hier ist ein Beispiel :

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

Hier können Sie die Telefonnummer als international formatierte Telefonnummer speichern

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

es gibt die Telefonnummer im internationalen Format +94 71 560 4888 zurück

so, jetzt habe ich die Ländervorwahl

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

Hoffe das wird dir helfen

1

Einer unserer Kunden hatte ein ähnliches Problem und nicht alle Telefonnummern begannen mit "+". Aber es ist immer noch oft möglich, das Land anhand der Formatierung der Telefonnummer zu erraten ... zum Beispiel 06 XX XX XX XX sieht aus wie eine französische Mobiltelefonnummer. Es könnte etwas anderes sein, aber es funktioniert, um zu versuchen, eine französische Nummer zu validieren und zu sehen, ob die libphonennummer positiv verifiziert werden kann.

Auch dieser Kunde verwendete den Namen des Kontakts, dessen Herkunftsland wahrscheinlich war, um zu versuchen, zu priorisieren, in welchem ​​Land die Validierung erfolgen soll. Zum Beispiel würden sie mit einem italienischen Namen versuchen, eine italienische Telefonnummer zu bestätigen.

Wir haben diese Ländercode-Erkennung zu libphonenumber hinzugefügt und eine kostenlose API erstellt, die den persönlichen Namen sowie die Formatierung der Telefonnummer (Präfix, Anzahl der Ziffern, Anzahl der Leerzeichen, Bindestrich oder Klammer usw.) kombiniert.

Es kann hier online ausprobiert werden https://apiphonenumber.com/

Es funktioniert mit Zahlen, die mit "+" beginnen, aber in 95% der Fälle auch mit anderen lokal formatierten Zahlen.

0
Elian Carsenat

Ich habe eine praktische Hilfsmethode, um dies zu erledigen, basierend auf einer Antwort, die oben gepostet wurde:

Importe:

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

Funktion:

    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