Cara Memvalidasi Nomor Telepon di PHP: Dari Regex hingga API Keterjangkauan
Tutorial PHP lengkap tentang memvalidasi nomor telepon. Pelajari cara memformat dengan libphonenumber-for-php dan memverifikasi keterjangkauan melalui REST API.
Untuk memvalidasi nomor telepon di PHP, pertama-tama format input menggunakan pustaka giggsey/libphonenumber-for-php untuk memastikannya memenuhi standar E.164. Karena pustaka PHP hanya memverifikasi sintaksis, Anda kemudian harus menggunakan REST API seperti NumberChecker.AI untuk memverifikasi secara diam-diam apakah kumpulan nomor Anda dapat dijangkau dan terdaftar di platform seperti iMessage atau Viber.
Prasyarat untuk Validasi Telepon PHP
Sebelum menulis skrip validasi, pastikan lingkungan Anda disiapkan untuk pemformatan lokal dan pemeriksaan keterjangkauan jarak jauh. Anda akan memerlukan manajer paket untuk menangani pustaka penguraian lokal, dan kunci API untuk melakukan pemeriksaan keterjangkauan aktual di lebih dari 200 negara.
Pastikan Anda telah menyiapkan hal-hal berikut:
- PHP 7.4 atau lebih tinggi terinstal di server atau lingkungan lokal Anda.
- Composer terinstal secara global untuk memanggil paket
giggsey/libphonenumber-for-php. - Kunci API NumberChecker.AI untuk verifikasi massal (batch).
Jalankan perintah berikut di terminal Anda untuk menginstal pustaka pemformatan yang diperlukan:
composer require giggsey/libphonenumber-for-php
Langkah 1: Batasan Regex PHP Dasar dan filter_var
Pengembang sering kali memulai dengan menggunakan preg_match atau filter_var untuk memvalidasi nomor telepon. Misalnya, regex dasar seperti preg_match("/^[0-9]{3}-[0-9]{4}-[0-9]{4}$/", $phone) dapat menerapkan pola tertentu untuk satu wilayah.
Namun, metode PHP dasar ini hanya memeriksa sintaksis dan tidak dapat mengonfirmasi apakah sebuah nomor itu nyata. Hanya mengandalkan regex akan menghasilkan positif palsu karena tidak dapat memverifikasi keterjangkauan atau pendaftaran platform. Selain itu, regex memerlukan pembaruan terus-menerus untuk mengakomodasi perubahan format internasional. Meskipun filter_var sangat baik untuk menstandarkan bilangan bulat atau string dasar, fungsi ini tidak memiliki aturan telekomunikasi kompleks yang diperlukan untuk memvalidasi kode panggilan global secara akurat.
Langkah 2: Memformat dengan libphonenumber-for-php
Untuk memvalidasi sintaksis dan memformat nomor ke standar E.164 dengan benar, gunakan pustaka giggsey/libphonenumber-for-php. Pustaka giggsey/libphonenumber-for-php menggabungkan metadata telekomunikasi Google untuk aturan panjang dan negara, memastikan pemeriksaan sintaksis lokal Anda seakurat mungkin.
Gagal memformat nomor ke E.164 sebelum mengirimkannya ke API dapat menyebabkan kesalahan validasi. Kode PHP yang dapat dijalankan berikut ini menunjukkan cara mengurai sekumpulan input mentah dan memformatnya dengan benar:
require 'vendor/autoload.php';
use libphonenumber\PhoneNumberUtil;
use libphonenumber\PhoneNumberFormat;
use libphonenumber\NumberParseException;
$phoneUtil = PhoneNumberUtil::getInstance();
$rawNumbers = ['+12025550123', '07700900077', 'invalid_string'];
$formattedNumbers = [];
foreach ($rawNumbers as $number) {
try {
// Parse assuming US as default region if no country code is provided
$proto = $phoneUtil->parse($number, "US");
if ($phoneUtil->isValidNumber($proto)) {
$formattedNumbers[] = $phoneUtil->format($proto, PhoneNumberFormat::E164);
}
} catch (NumberParseException $e) {
// Silently skip or log invalid formats
error_log("Error parsing $number: " . $e->getMessage());
}
}
// $formattedNumbers now contains strictly E.164 formatted strings
print_r($formattedNumbers);
Langkah 3: Memverifikasi Keterjangkauan melalui REST API NumberChecker.AI
Setelah kumpulan nomor Anda diformat ke E.164, langkah selanjutnya adalah memverifikasi keterjangkauan aktual. NumberChecker.AI menyediakan REST API untuk keterjangkauan nomor telepon secara real-time dan diam-diam serta verifikasi platform. NumberChecker.AI mendukung 45+ detektor platform termasuk iMessage, Viber, dan Apple.
NumberChecker.AI dirancang untuk verifikasi massal (batch) melalui CSV/TXT atau REST API. Misalnya, pemeriksa iMessage menerima minimal 2.000 nomor per batch. Yang terpenting, NumberChecker.AI melakukan pemeriksaan secara diam-diam tanpa memberi tahu pemilik akun.
Berikut adalah skrip PHP yang dapat dijalankan menggunakan cURL untuk mengirim kumpulan nomor yang telah diformat ke API:
// Assuming $formattedNumbers contains valid E.164 numbers from Step 2
$apiKey = 'YOUR_API_KEY_HERE';
$apiUrl = 'https://api.numberchecker.ai/v1/imessage'; // Example endpoint
$payload = json_encode([
'numbers' => $formattedNumbers
]);
$ch = curl_init($apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Bearer ' . $apiKey
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode === 200) {
$results = json_decode($response, true);
// Process the returned fields: Number, activated
print_r($results);
} else {
echo "API Request failed with HTTP status $httpCode";
}
Batasan Jujur dari Validasi Telepon
Saat membangun alur kerja validasi di PHP, penting untuk memahami batasan dari alat yang Anda gunakan.
- Sintaksis vs. Keterjangkauan: Pustaka PHP hanya dapat mengonfirmasi sintaksis, bukan keterjangkauan. Sebuah nomor bisa saja diformat dengan sempurna menurut metadata Google tetapi tetap terputus atau tidak aktif.
- Persyaratan Pemformatan: Pemeriksaan API memerlukan pemformatan E.164 yang valid agar berfungsi dengan benar. Input pengguna mentah harus selalu diurai secara lokal terlebih dahulu untuk menghindari pemborosan permintaan API pada string yang salah format.
- Fokus Pemrosesan Massal: NumberChecker.AI adalah alat pemrosesan massal (batch), bukan alat pencarian nomor tunggal. Alur kerja harus dirancang untuk mengumpulkan nomor dan mengirimkannya secara massal (misalnya, minimal 1.000 hingga 2.000 per batch tergantung pada detektor platform) daripada membuat permintaan HTTP individual untuk setiap pendaftaran pengguna.
Pertanyaan yang Sering Diajukan (FAQ)
Bisakah PHP memverifikasi secara bawaan apakah nomor telepon aktif?
Tidak, metode PHP dasar seperti preg_match dan filter_var hanya memeriksa sintaksis dan tidak dapat mengonfirmasi apakah sebuah nomor itu nyata atau aktif. Anda harus menggunakan API pihak ketiga untuk memverifikasi keterjangkauan aktual.
Apa regex terbaik untuk nomor telepon internasional di PHP?
Hanya mengandalkan regex akan menghasilkan positif palsu karena tidak dapat memverifikasi keterjangkauan atau pendaftaran platform, dan memerlukan pembaruan terus-menerus untuk format internasional. Alih-alih regex, gunakan pustaka giggsey/libphonenumber-for-php untuk validasi sintaksis yang akurat.
Bagaimana cara memformat nomor telepon ke E.164 di PHP?
Anda dapat memformat nomor telepon ke standar E.164 dengan menginstal pustaka giggsey/libphonenumber-for-php melalui Composer, mengurai input mentah menggunakan PhoneNumberUtil::getInstance()->parse(), dan kemudian memformatnya dengan PhoneNumberFormat::E164.
Mulai dengan NumberChecker.AI
Coba NumberChecker.AI secara gratis — 1.000 pemeriksaan saat mendaftar, tanpa memerlukan kartu kredit.
Siap memulai?
Coba layanan validasi nomor WhatsApp kami dan lihat perbedaan data bersih.