2011-06-27 11 views
8

Chciałbym znaleźć narzędzie/bibliotekę, która może przyjmować wprowadzone przez użytkownika numery telefonów w formacie swobodnym wprowadzone przez stronę internetową i przetwarzać je na liczbę odpowiednią do dzwonienia z danego kraj.Czy istnieje coś takiego jak biblioteka czyszczenia numerów telefonów?

To nie jest tak proste, jak na początku może brzmieć. Strona umożliwia ludziom na całym świecie wprowadzanie swoich numerów w dowolny sposób, dlatego wiele osób podaje numery narodowe (kraj jest również dostępny w innym polu). Niektóre osoby wprowadzają numer międzynarodowy w "poprawnych" formatach (z "+"), niektórzy ludzie wprowadzają go nieco mniej poprawnie, używając międzynarodowego prefiksu ich kraju.

Chciałbym przekazać bibliotece/narzędziu nazwę kraju, z którego dzwonię, numer telefonu w dowolnym formacie i, ewentualnie, kraj, w którym się znajduje (ponieważ pomoże to wygenerować kod międzynarodowy, jeśli nie zostanie wprowadzony) i używać znanych wzorców do najlepiej odgadnąć numer, który będzie działał w moim kraju dzwonisz

Tak więc, na przykład, podczas rozmowy z USA do wielu UK:

+44 (0) 1225-344567 => 011441225344567 

Albo podczas rozmowy z Wielka Brytania na numer amerykański:

(613) 4562342 => 0016134562342 

Ktoś wie o wszelkich (idealnie .NET Framework w obsłudze) rozwiązań, które będą mnie unikać niewątpliwie ponowne wynalezienie koła

+1

Taka biblioteka brzmi, jakby była bardzo niszowa. Nie wspominając o tym, że nie ma żadnych standardowych reguł. Nawet w tym samym kraju mogą występować różne formaty numerów, jeśli dzwonisz do/z telefonu komórkowego na linię stacjonarną! Najlepszym rozwiązaniem dla międzynarodowych numerów telefonów jest niestety pole tekstowe w swobodnym formularzu. –

+1

Dzięki. Mamy już pole formatu wolnego. Połączyłem to z naszym systemem telefonicznym, aby ludzie mogli dzwonić do klientów bez konieczności (często nieprawidłowo) wprowadzania numeru do telefonu. Musiałem jednak zaimplementować niestandardowy kod do masowania liczb, jak w przykładach powyżej ...i jest to trudniejsze, ponieważ mamy biura w USA i Wielkiej Brytanii, i przyszło mi do głowy, że może istnieć jakiś kod, żeby to zrobić (nawet jeśli musimy za to zapłacić) - mam większe ryby do smażenia ;) – Kram

+0

http://stackoverflow.com/q/187216/469210 wygląda podobnie. – borrible

Odpowiedz

2

Tak: Google wspólny Java, C++ i biblioteki JavaScript w celu analizowania, formatowania, przechowywania i walidacji międzynarodowe numery telefonów, został przeniesiony do C#:

https://github.com/erezak/libphonenumber-csharp

Powodzenia!

+0

Z tego, co mogę powiedzieć, jest to rzeczywiście najlepsza opcja ... jednak naprawdę chcę to w .Net też ... natknąłem się na to, co twierdzi, że wykonuję zadanie: http: //blog.thekieners.com/2011/06/06/using-googles-libphonenumber-in-microsoft-net-with-c/ – Kram

0

Nie, nie ma :) Istnieje bardzo niewiele zasad, które rządzą numerów telefonicznych między narodami . Niektóre kraje mają nawet wiele reprezentacji.

W Wielkiej Brytanii na przykład ma zmienne wielkości numery kierunkowe np:

  • 0121 = Birmingham
  • 01223 = Cambridge
0

Istnieje "standard" do międzynarodowego formatu (i krajowych) telefon liczby. Wyglądają tak: +31 42 123 4567 (+ numer wywołania przed numerem kraju). Przykład pobrany z Wikipedia. Chociaż nie należy oczekiwać, że ktokolwiek wejdzie w to w ten sposób. Z mojego doświadczenia wynika, że ​​użytkownicy najprawdopodobniej będą trzymać się formatu, do którego są przyzwyczajeni.

Nie znam żadnej biblioteki, która dokona konwersji między wszystkimi reprezentacjami (głównie lokalnymi) a tymi wymienionymi przeze mnie lub w jakimkolwiek innym formacie.

7

Wprowadziłem to, Mark. Pracuję dla operatora komórkowego i mam międzynarodową aplikację do wysyłania SMS-ów. Nie znam żadnych bibliotek stron trzecich, które implementują te reguły. Jak wspomniano powyżej, nie można po prostu poradzić sobie z losowymi danymi wejściowymi, ponieważ formaty numerów telefonów różnią się w zależności od kraju. Niektóre kraje, takie jak Niemcy, mają kody o zmiennej długości i numery telefonów. Jeśli nie wprowadzą tam kodu kraju, jesteś zatopiony. Jednak w moim przypadku mogę założyć, że jeśli brakuje kodu kraju, jest to numer telefonu w USA. Wyniki mojego filtra okazały się bardzo dokładne z użytkownikami i danymi, które miałem.

Można przyjąć pewne założenia, a znając grupę docelową, logując dane wejściowe i analizując, można wybierać rzeczy. Moje pierwsze wdrożenie dotyczyło aplikacji internetowej "białej etykiety", która jest używana do testowania przez różne ludzie na całym świecie. Szybko odkryłem, że większość obcokrajowców działa razem i jest przyzwyczajona do quasi-standardowego formatu. Zwykle Amerykanie wprowadzają numery telefonów, które są najbardziej zdezorientowane. Europejczycy są bardzo przyzwyczajeni do wybierania międzynarodowego.

Pierwsza zasada polega na usunięciu wszystkiego oprócz cyfr i wiodącego znaku "+".

Jeśli wynikowy numer składa się z mniej niż 8 cyfr, oznacza to komunikat śmieciowy.

Jeśli wynikowy numer zaczyna się od "+", zakłada się, że jest to format standardowy, a kolejne 2-6 znaków oznacza "kod kraju". Sprawdź kod kraju, a następnie przetwórz pozostałe cyfry zgodnie z zasadami obowiązującymi w tym kraju.

Jeśli numer zaczyna się od 0, załóż kogoś, kto wstawił prefiks dostępu międzynarodowego, i usuń wiodące 0 i 1, a następnie: , jeśli pozostała liczba to 10 cyfr, załóżmy, że był to amerykański numer wprowadzony przez Amerykanina, i odpowiednio postępuj. Jeśli pozostała liczba nie składa się z 10 cyfr, ale co najmniej 8, przyjmuj, że pierwsze 2-6 cyfr to kod państwa, sprawdź kod kraju i postępuj zgodnie z zasadami tego kraju.

Jeśli numer zaczyna się od cyfry 1 i ma on 11 cyfr, należy przyjąć, że jest to numer USA (lub Wyspy Karaibskiej) i odpowiednio przetworzyć.

JEŻELI numer zaczyna się od 1 i nie ma 11 cyfr, usuń wiodące 1, sprawdź, czy zostało jeszcze co najmniej 8 cyfr, i załóż pozostałe 2 do 6 cyfr kodu kraju i przeprowadź proces według przepisy krajowe.

Wreszcie, jeśli numer nie jest poprzedzony +, 0 lub 1 i ma co najmniej 8 cyfr, załóżmy, że jest on zapisany standardowo bez znaku +, to jest najpierw kod kraju, użyj pierwszych 2 do 6 cyfr jako kod kraju i proces zgodnie z zasadami tego kraju.

W tym wszystkim chodzi o mapowanie wszystkich kodów krajów na świecie i informacji o planach numeracji dla każdego kraju. Mam tę mapę i zasady dla wielu krajów. Jeśli chciałbyś otrzymać te informacje, chętnie podzielę się nimi, wraz z kodem C# określającym, który kraj. Napisz do mnie.

Ogromną pomocą w tym zakresie jest przesłanie nazwy kraju, który oprogramowanie zgaduje dla użytkownika. Szybko zrozumieją, jeśli próbują wprowadzić niemiecki numer telefonu, a oprogramowanie poprosi ich, jeśli próbują wybrać Guam!

+0

+1 Dobra odpowiedź, Christo. Bardzo kompleksowy. –

+0

Skontaktuj się z tobą, Christo? (Chcę, żeby twoja implementacja była bardziej kompletna niż moja). –

+0

@Peter Powiedział "Pracuję dla operatora komórkowego", więc jest to praca na jeden dzień - najprawdopodobniej należy do pracodawcy i nie może ci tego dać. (bez błagania ich o otwarcie kodu źródłowego) – Rup

Powiązane problemy