Tôi cũng sẽ đề nghị xem xét Thư viện Google " libphonenumber ". Tôi biết nó không phải là regex nhưng nó thực hiện chính xác những gì bạn muốn.
Ví dụ, nó sẽ nhận ra rằng:
15555555555
là một số có thể nhưng không phải là một số hợp lệ. Nó cũng hỗ trợ các quốc gia bên ngoài Hoa Kỳ.
Điểm nổi bật của chức năng:
- Phân tích / định dạng / xác thực số điện thoại cho tất cả các quốc gia / khu vực trên thế giới.
getNumberType
- lấy loại số dựa trên chính số đó; có thể phân biệt Đường dây cố định, Di động, Không thu phí, Tỷ lệ cao cấp, Chi phí chung, VoIP và Số cá nhân (bất cứ khi nào khả thi).
isNumberMatch
- có được một mức độ tin cậy về việc hai số có thể giống nhau hay không.
getExampleNumber
/ getExampleNumberByType
- cung cấp số ví dụ hợp lệ cho tất cả các quốc gia / khu vực, với tùy chọn chỉ định loại số điện thoại mẫu nào là cần thiết.
isPossibleNumber
- nhanh chóng đoán xem một số có phải là số điện thoại có thể hay không bằng cách chỉ sử dụng thông tin độ dài, nhanh hơn nhiều so với xác thực đầy đủ.
isValidNumber
- xác nhận đầy đủ số điện thoại cho một vùng bằng thông tin độ dài và tiền tố.
AsYouTypeFormatter
- định dạng số điện thoại khi đang di chuyển khi người dùng nhập từng chữ số.
findNumbers
- tìm số trong nhập văn bản.
PhoneNumberOfflineGeocoder
- cung cấp thông tin địa lý liên quan đến một số điện thoại.
Ví dụ
Vấn đề lớn nhất với xác nhận số điện thoại là nó phụ thuộc rất nhiều về văn hóa.
- Mỹ
(408) 974–2042
là số hợp lệ của Hoa Kỳ
(999) 974–2042
là không phải là một giá trị số Mỹ
- Châu Úc
0404 999 999
là số hợp lệ của Úc
(02) 9999 9999
cũng là số hợp lệ của Úc
(09) 9999 9999
là không phải là một giá trị số Úc
Một biểu thức thông thường là tốt để kiểm tra định dạng của một số điện thoại, nhưng nó không thực sự có thể kiểm tra tính hợp lệ của một số điện thoại.
Tôi sẽ đề nghị bỏ qua một biểu thức chính quy đơn giản để kiểm tra số điện thoại của bạn và sử dụng thư viện như của Google libphonenumber
(liên kết đến dự án GitHub) .
Giới thiệu libphonenumber!
Sử dụng một trong những ví dụ phức tạp hơn của bạn 1-234-567-8901 x1234
, bạn sẽ có được dữ liệu sau libphonenumber
(liên kết đến bản demo trực tuyến) :
Validation Results
Result from isPossibleNumber() true
Result from isValidNumber() true
Formatting Results:
E164 format +12345678901
Original format (234) 567-8901 ext. 123
National format (234) 567-8901 ext. 123
International format +1 234-567-8901 ext. 123
Out-of-country format from US 1 (234) 567-8901 ext. 123
Out-of-country format from CH 00 1 234-567-8901 ext. 123
Vì vậy, bạn không chỉ tìm hiểu xem số điện thoại có hợp lệ không, mà còn có được định dạng số điện thoại nhất quán trong ngôn ngữ của bạn.
Như một phần thưởng, libphonenumber
cũng có một số bộ dữ liệu để kiểm tra tính hợp lệ của các số điện thoại, do đó, kiểm tra một số như +61299999999
(phiên bản quốc tế (02) 9999 9999
) trả về dưới dạng số hợp lệ có định dạng:
Validation Results
Result from isPossibleNumber() true
Result from isValidNumber() true
Formatting Results
E164 format +61299999999
Original format 61 2 9999 9999
National format (02) 9999 9999
International format +61 2 9999 9999
Out-of-country format from US 011 61 2 9999 9999
Out-of-country format from CH 00 61 2 9999 9999
libphonenumber cũng cung cấp cho bạn nhiều lợi ích bổ sung, chẳng hạn như lấy vị trí mà số điện thoại được phát hiện là và cũng nhận được thông tin múi giờ từ số điện thoại:
PhoneNumberOfflineGeocoder Results
Location Australia
PhoneNumberToTimeZonesMapper Results
Time zone(s) [Australia/Sydney]
Nhưng số điện thoại Úc không hợp lệ ( (09) 9999 9999
) trả về rằng đó không phải là số điện thoại hợp lệ.
Validation Results
Result from isPossibleNumber() true
Result from isValidNumber() false
Phiên bản của Google có mã cho Java và Javascript, nhưng mọi người cũng đã triển khai các thư viện cho các ngôn ngữ khác sử dụng bộ dữ liệu số điện thoại Google i18n:
Trừ khi bạn chắc chắn rằng bạn sẽ luôn chấp nhận các số từ một địa phương và chúng sẽ luôn ở một định dạng, tôi khuyên bạn không nên viết mã của riêng mình cho việc này và sử dụng libphonenumber để xác thực và hiển thị số điện thoại.