Trong hướng dẫn này, bạn sẽ tìm hiểu về xác thực số điện thoại quốc tế bằng cách sử dụng lập trình PHP. Khi số điện thoại được lấy từ người dùng bằng cách sử dụng các trường biểu mẫu, nên xác thực giá trị số điện thoại bằng mã PHP. Ví dụ sau giải thích cách thực hiện đối với Số điện thoại quốc tế
Thí dụ
Xác thực số điện thoại quốc tế
Nhập số điện thoại của bạn Mã quốc giaMã vùng
Số điện thoại
Đối với đầu vào ở trên, thông báo lỗi được tạo như bên dưới
Lỗi Nhập mã ISD hợp lệ
Lỗi Nhập mã vùng hợp lệ
Lỗi Nhập số điện thoại hợp lệ
Mã PHP mẫu
// Kiểm tra xem việc gửi đã được thực hiện chưa
nếu(. isset($_POST["hidSubmit"])){
//Khai báo các biến cần thiết
$intisd="";
$intccode="";
$intphone="";
DisplayForm();
}
khác{
//Gán các giá trị đã nhập cho các biến để xác thực
$intisd=$_POST["txtisdcode"];
$intccode=$_POST["txtcitycode"];
$intphone=$_POST["txtphone"];
// Giá trị đã nhập được kiểm tra đúng định dạng
if(substr_count($intisd,"+")>0){
if(strpos($intisd,"+")==0)
$intisd=substr($intisd,1,strlen($intisd));
}
$result=ereg("^[0-9]+$",$intisd,$trashed);
$result=ereg("^[0-9]+$",$intisd,$trashed);
nếu(. ($result)){echo "Nhập ISDCODE hợp lệ";}
$result=ereg("^[0-9]+$",$intccode,$trashed);
nếu(. ($result)){echo "Nhập MÃ THÀNH PHỐ hợp lệ";}
$result=ereg("^[0-9]+$",$intphone,$trashed);
nếu(. ($result)){echo "Nhập số điện thoại hợp lệ";}
DisplayForm();
}
// Hàm do người dùng định nghĩa để hiển thị biểu mẫu trong trường hợp có lỗi
hàm DisplayForm(){
toàn cầu $intisd,$intccode,$intphone;
?>
Mã HTML cho biểu mẫu sau
Cắt 'n' Dán mã cho ví dụ trên
Tham khảo.
Vui lòng thích, +1, liên kết đến và chia sẻ tài nguyên SmartWebby này nếu bạn thấy nó hữu ích. ThanksThư viện PHP để phân tích cú pháp, định dạng, lưu trữ và xác thực số điện thoại quốc tế. Thư viện này dựa trên libphonenumber của Google
Cài đặt
Phiên bản PHP 5. 3 lên đến PHP 8. 1 hiện đang được hỗ trợ
Phần mở rộng mbstring PECL là bắt buộc
Nên sử dụng trình soạn thảo để cài đặt thư viện
$ composer require giggsey/libphonenumber-for-php
Bạn cũng có thể sử dụng bất kỳ trình tải tự động tuân thủ PSR-4 nào khác
Nếu bạn không sử dụng trình soạn thảo, hãy đảm bảo rằng bạn cũng tải bất kỳ phần phụ thuộc nào mà dự án này có, chẳng hạn như giggsey/locale
giggsey/libphonenumber-for-php-lite
Nếu bạn chỉ muốn đảm bảo chức năng PhoneNumber Util cốt lõi, bạn có thể sử dụng giggsey/libphonenumber-for-php-lite, cung cấp kích thước gói nhỏ hơn nhiều
Tài liệu
- Số điện thoại sử dụng
- Thông tin số ngắn
- Số điện thoại Định vị địa lý
- Số điện thoại để ánh xạ nhà cung cấp dịch vụ
- Số điện thoại ánh xạ múi giờ
- Đối sánh số điện thoại
- Trình định dạng khi bạn nhập
Bản trình diễn trực tuyến
Bản trình diễn trực tuyến có sẵn và nguồn có thể được tìm thấy tại giggsey/libphonenumber-example
Điểm nổi bật về chức năng- Phân tích cú pháp/đị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
- $swissNumberStr = "044 668 18 00"; $phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance(); try { $swissNumberProto = $phoneUtil->parse($swissNumberStr, "CH"); var_dump($swissNumberProto); } catch (\libphonenumber\NumberParseException $e) { var_dump($e); }1 - nhận loại số dựa trên chính số đó;
- $swissNumberStr = "044 668 18 00"; $phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance(); try { $swissNumberProto = $phoneUtil->parse($swissNumberStr, "CH"); var_dump($swissNumberProto); } catch (\libphonenumber\NumberParseException $e) { var_dump($e); }2 - nhận được mức độ tin cậy về việc liệu hai số có thể giống nhau hay không
- $swissNumberStr = "044 668 18 00"; $phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance(); try { $swissNumberProto = $phoneUtil->parse($swissNumberStr, "CH"); var_dump($swissNumberProto); } catch (\libphonenumber\NumberParseException $e) { var_dump($e); }3/$swissNumberStr = "044 668 18 00"; $phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance(); try { $swissNumberProto = $phoneUtil->parse($swissNumberStr, "CH"); var_dump($swissNumberProto); } catch (\libphonenumber\NumberParseException $e) { var_dump($e); }4 - 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 ví dụ nào là cần thiết
- $swissNumberStr = "044 668 18 00"; $phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance(); try { $swissNumberProto = $phoneUtil->parse($swissNumberStr, "CH"); var_dump($swissNumberProto); } catch (\libphonenumber\NumberParseException $e) { var_dump($e); }5 - xác thực đầy đủ số điện thoại cho một khu vực sử dụng thông tin về độ dài và tiền tố
- $swissNumberStr = "044 668 18 00"; $phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance(); try { $swissNumberProto = $phoneUtil->parse($swissNumberStr, "CH"); var_dump($swissNumberProto); } catch (\libphonenumber\NumberParseException $e) { var_dump($e); }6 - cung cấp thông tin địa lý liên quan đến số điện thoại
- $swissNumberStr = "044 668 18 00"; $phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance(); try { $swissNumberProto = $phoneUtil->parse($swissNumberStr, "CH"); var_dump($swissNumberProto); } catch (\libphonenumber\NumberParseException $e) { var_dump($e); }7 - cung cấp thông tin múi giờ liên quan đến số điện thoại
- $swissNumberStr = "044 668 18 00"; $phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance(); try { $swissNumberProto = $phoneUtil->parse($swissNumberStr, "CH"); var_dump($swissNumberProto); } catch (\libphonenumber\NumberParseException $e) { var_dump($e); }8 - cung cấp thông tin nhà mạng liên quan đến số điện thoại
lập phiên bản
Thư viện này sẽ cố gắng tuân theo các số phiên bản giống như Google. Có thể có các bản phát hành bổ sung khi cần thiết để khắc phục các sự cố nghiêm trọng không thể đợi đến bản phát hành tiếp theo từ Google
Điều này không có nghĩa là dự án này có thể không tuân theo Phiên bản ngữ nghĩa mà thay vào đó là chính sách phiên bản của Google. Do đó, các bước nhảy trong các phiên bản chính có thể không thực sự chứa bất kỳ thay đổi không tương thích ngược nào. Vui lòng đọc ghi chú phát hành cho các bản phát hành đó
Google cố gắng phát hành các phiên bản của họ theo Phiên bản ngữ nghĩa, như được trình bày trong
Ví dụ nhanh
Giả sử bạn có một chuỗi đại diện cho một số điện thoại từ Thụy Sĩ. Đây là cách bạn phân tích/chuẩn hóa nó thành đối tượng PhoneNumber
$swissNumberStr = "044 668 18 00"; $phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance(); try { $swissNumberProto = $phoneUtil->parse($swissNumberStr, "CH"); var_dump($swissNumberProto); } catch (\libphonenumber\NumberParseException $e) { var_dump($e); }
Tại thời điểm này, swissNumberProto chứa
class libphonenumber\PhoneNumber#9 (7) { private $countryCode => int(41) private $nationalNumber => double(446681800) private $extension => NULL private $italianLeadingZero => NULL private $rawInput => NULL private $countryCodeSource => NULL private $preferredDomesticCarrierCode => NULL }
Bây giờ hãy để chúng tôi xác nhận xem số đó có hợp lệ không
$isValid = $phoneUtil->isValidNumber($swissNumberProto); var_dump($isValid); // true
Có một vài định dạng được hỗ trợ bởi phương pháp định dạng, như minh họa bên dưới
// Produces "+41446681800" echo $phoneUtil->format($swissNumberProto, \libphonenumber\PhoneNumberFormat::E164); // Produces "044 668 18 00" echo $phoneUtil->format($swissNumberProto, \libphonenumber\PhoneNumberFormat::NATIONAL); // Produces "+41 44 668 18 00" echo $phoneUtil->format($swissNumberProto, \libphonenumber\PhoneNumberFormat::INTERNATIONAL);
Bạn cũng có thể chọn định dạng số theo cách nó được gọi từ một quốc gia khác
// Produces "011 41 44 668 1800", the number when it is dialled in the United States. echo $phoneUtil->formatOutOfCountryCallingNumber($swissNumberProto, "US"); // Produces "00 41 44 668 18 00", the number when it is dialled in Great Britain. echo $phoneUtil->formatOutOfCountryCallingNumber($swissNumberProto, "GB");
mã hóa địa lý
$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance(); $swissNumberProto = $phoneUtil->parse("044 668 18 00", "CH"); $usNumberProto = $phoneUtil->parse("+1 650 253 0000", "US"); $gbNumberProto = $phoneUtil->parse("0161 496 0000", "GB"); $geocoder = \libphonenumber\geocoding\PhoneNumberOfflineGeocoder::getInstance(); // Outputs "Zurich" echo $geocoder->getDescriptionForNumber($swissNumberProto, "en_US"); // Outputs "Zürich" echo $geocoder->getDescriptionForNumber($swissNumberProto, "de_DE"); // Outputs "Zurigo" echo $geocoder->getDescriptionForNumber($swissNumberProto, "it_IT"); // Outputs "Mountain View, CA" echo $geocoder->getDescriptionForNumber($usNumberProto, "en_US"); // Outputs "Mountain View, CA" echo $geocoder->getDescriptionForNumber($usNumberProto, "de_DE"); // Outputs "미국" (Korean for United States) echo $geocoder->getDescriptionForNumber($usNumberProto, "ko-KR"); // Outputs "Manchester" echo $geocoder->getDescriptionForNumber($gbNumberProto, "en_GB"); // Outputs "영국" (Korean for United Kingdom) echo $geocoder->getDescriptionForNumber($gbNumberProto, "ko-KR");
Số ngắnThông tin
$shortNumberInfo = \libphonenumber\ShortNumberInfo::getInstance(); // true var_dump($shortNumberInfo->isEmergencyNumber("999", "GB")); // true var_dump($shortNumberInfo->connectsToEmergencyNumber("999", "GB")); // false var_dump($shortNumberInfo->connectsToEmergencyNumber("911", "GB")); // true var_dump($shortNumberInfo->isEmergencyNumber("911", "US")); // true var_dump($shortNumberInfo->connectsToEmergencyNumber("911", "US")); // false var_dump($shortNumberInfo->isEmergencyNumber("911123", "US")); // true var_dump($shortNumberInfo->connectsToEmergencyNumber("911123", "US"));
Ánh xạ số điện thoại đến nhà cung cấp dịch vụ
$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance(); $swissNumberProto = $phoneUtil->parse("798765432", "CH"); $carrierMapper = \libphonenumber\PhoneNumberToCarrierMapper::getInstance(); // Outputs "Swisscom" echo $carrierMapper->getNameForNumber($swissNumberProto, "en");
Ánh xạ số điện thoại tới múi giờ
$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance(); $swissNumberProto = $phoneUtil->parse("798765432", "CH"); $timeZoneMapper = \libphonenumber\PhoneNumberToTimeZonesMapper::getInstance(); // returns array("Europe/Zurich") $timeZones = $timeZoneMapper->getTimeZonesForNumber($swissNumberProto);
Câu hỏi thường gặp
Vấn đề với số không hợp lệ?
Thư viện này sử dụng siêu dữ liệu số điện thoại từ libphonenumber của Google. Nếu thư viện này hoạt động như dự định, nó sẽ cung cấp kết quả giống như phiên bản Java của dự án của Google
Nếu bạn cho rằng một số điện thoại đang trả về kết quả không chính xác, trước tiên hãy kiểm tra số điện thoại đó bằng libphonenumber qua Bản trình diễn trực tuyến của họ. Nếu điều đó trả về kết quả tương tự như dự án này và bạn cảm thấy đó là lỗi, hãy nêu vấn đề với dự án libphonenumber
Nếu Bản trình diễn trực tuyến của Google đưa ra kết quả khác với bản trình diễn libphonenumber-for-php, vui lòng nêu vấn đề tại đây
Đang tạo dữ liệu
Việc tạo dữ liệu thường không cần thiết, vì kho lưu trữ này thường sẽ luôn có siêu dữ liệu tối đa
Nếu bạn cần tạo dữ liệu, các lệnh được cung cấp bởi Phing. Đảm bảo bạn đã cài đặt tất cả các phụ thuộc của nhà soạn nhạc dev, sau đó chạy
$swissNumberStr = "044 668 18 00"; $phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance(); try { $swissNumberProto = $phoneUtil->parse($swissNumberStr, "CH"); var_dump($swissNumberProto); } catch (\libphonenumber\NumberParseException $e) { var_dump($e); }0
Quá trình biên dịch này sao chép dự án libphonenumber ở phiên bản được chỉ định trong PHIÊN BẢN SIÊU DỮ LIỆU. txt