Tôi đã triển khai thực hiện điều này, Mark. Tôi làm việc cho một nhà cung cấp dịch vụ không dây và có một ứng dụng gửi SMS quốc tế. Tôi không biết về bất kỳ thư viện của bên thứ ba nào thực hiện các quy tắc này. Như đã đề cập ở trên, người ta không thể chỉ đối phó với đầu vào ngẫu nhiên vì các định dạng số điện thoại khác nhau giữa các quốc gia. Một số quốc gia như Đức có mã vùng và số điện thoại có chiều dài thay đổi. Nếu họ không đặt mã quốc gia vào đó bạn bị đánh chìm. Tuy nhiên, trong trường hợp của tôi, tôi có thể giả sử nếu thiếu mã quốc gia, đó là số điện thoại ở Hoa Kỳ. Kết quả của bộ lọc của tôi đã được chứng minh là rất chính xác với người dùng và đầu vào tôi đã có.
Người ta có thể đưa ra một số giả định, và bằng cách biết đối tượng mục tiêu, ghi lại đầu vào và phân tích, người ta có thể nhận được mọi thứ được gọi. Thực hiện đầu tiên của tôi là ứng dụng web "nhãn trắng" được sử dụng để thử nghiệm mọi người khắp nơi trên thế giới. Tôi nhanh chóng thấy rằng hầu hết người nước ngoài có hành động của họ với nhau và được sử dụng để định dạng gần như chuẩn +. Nó thường là người Mỹ nhập số điện thoại bị nhầm lẫn nhất. Người châu Âu rất quen với việc quay số quốc tế.
Quy tắc đầu tiên là loại bỏ mọi thứ trừ chữ số và dấu "+" hàng đầu.
Nếu số kết quả có ít hơn 8 chữ số, nó là rác, cung cấp lỗi người dùng.
Nếu số kết quả bắt đầu bằng dấu '+' giả định đó là định dạng chuẩn và 2-6 chữ số tiếp theo thể hiện "mã quốc gia". Tìm ra mã quốc gia sau đó xử lý các chữ số còn lại theo các quy tắc cho quốc gia đó.
Nếu số bắt đầu bằng 0, giả sử người nào đó đặt tiền tố truy cập quốc tế và bỏ số 0 và số 1, sau đó: nếu số còn lại là 10 chữ số, giả sử đó là số USA được nhập bởi người Mỹ, và xử lý cho phù hợp. Nếu số còn lại không phải là 10 chữ số, nhưng ít nhất 8, giả sử 2-6 chữ số đầu tiên là mã quốc gia, tra cứu mã quốc gia và xử lý theo quy tắc của quốc gia đó.
Nếu số bắt đầu bằng số 1 và tổng số là 11 chữ số, giả sử đó là số USA (hoặc Đảo Caribê) và xử lý tương ứng.
Nếu số bắt đầu bằng số 1 và không phải là 11 chữ số, hãy bỏ bớt số 1 đầu, xem có ít nhất 8 chữ số còn lại không và giả sử 2 đến 6 chữ số còn lại là mã quốc gia và quy trình cho mỗi quy tắc quốc gia.
Cuối cùng, với số không dẫn đầu bằng dấu +, 0 hoặc 1 và có ít nhất 8 chữ số, giả sử ký hiệu tiêu chuẩn không có dấu +, trước tiên là mã quốc gia, sử dụng 2 đến 6 chữ số đầu tiên là mã quốc gia và quy trình theo quy tắc của quốc gia đó.
Bí quyết trong tất cả điều này là lập bản đồ tất cả các mã quốc gia trên thế giới và thông tin về kế hoạch đánh số cho mỗi quốc gia. Tôi có bản đồ đó và các quy tắc cho nhiều quốc gia. Nếu bạn muốn thông tin này tôi muốn được chia sẻ, cùng với một số mã C# để tìm ra quốc gia nào. Nhắn tin cho tôi.
Một trợ giúp lớn trong việc này là đăng lại tên quốc gia mà phần mềm của bạn đang đoán cho người dùng. Họ sẽ hiểu rất nhanh nếu họ đang cố gắng nhập số điện thoại của Đức và phần mềm của bạn hỏi họ liệu họ có đang cố gắng quay số Guam không!
Thư viện như vậy nghe có vẻ rất thích hợp. Chưa kể, không có bất kỳ quy tắc chuẩn nào. Ngay cả trong cùng một quốc gia, có thể có các định dạng số khác nhau nếu bạn đang gọi đến/từ điện thoại di động đến một đường dây đất! Tuy nhiên, giải pháp tốt nhất cho các số điện thoại quốc tế là một hộp văn bản dạng tự do. –
Cảm ơn. Chúng tôi đã có hộp định dạng miễn phí. Tôi đã liên kết điều này với hệ thống điện thoại của chúng tôi để mọi người có thể gọi cho khách hàng mà không cần phải (thường xuyên không chính xác) nhập số điện thoại vào điện thoại. Tuy nhiên, tôi đã phải thực hiện một số mã tùy chỉnh để xoa bóp các con số như trong các ví dụ trên ...và điều này càng khó khăn hơn khi chúng tôi có cả văn phòng ở Mỹ và Anh, và có một số mã đã xuất hiện để làm điều này (ngay cả khi chúng tôi cần trả tiền) - Tôi có cá lớn hơn để chiên ;) – Kram
http://stackoverflow.com/q/187216/469210 xuất hiện tương tự. – borrible