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!
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. –
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
http://stackoverflow.com/q/187216/469210 wygląda podobnie. – borrible