Como Validar Números de Telefone em PHP: Do Regex à API de Alcançabilidade
Um tutorial completo de PHP sobre como validar números de telefone. Aprenda a formatar com libphonenumber-for-php e a verificar a alcançabilidade via API REST.
Para validar um número de telefone em PHP, primeiro formate a entrada usando a biblioteca giggsey/libphonenumber-for-php para garantir que ela atenda ao padrão E.164. Como as bibliotecas PHP verificam apenas a sintaxe, você deve então usar uma API REST como o NumberChecker.AI para verificar silenciosamente se o seu lote de números é alcançável e está registrado em plataformas como iMessage ou Viber.
Pré-requisitos para Validação de Telefone em PHP
Antes de escrever o script de validação, certifique-se de que seu ambiente esteja configurado tanto para formatação local quanto para verificações remotas de alcançabilidade. Você precisará de um gerenciador de pacotes para lidar com a biblioteca de análise local e de uma chave de API para realizar as verificações reais de alcançabilidade em mais de 200 países.
Certifique-se de ter o seguinte pronto:
- PHP 7.4 ou superior instalado em seu servidor ou ambiente local.
- Composer instalado globalmente para requerer o pacote
giggsey/libphonenumber-for-php. - Uma chave de API do NumberChecker.AI para verificação de lotes em massa.
Execute o seguinte comando em seu terminal para instalar a biblioteca de formatação necessária:
composer require giggsey/libphonenumber-for-php
Passo 1: Os Limites do Regex Básico do PHP e filter_var
Os desenvolvedores costumam começar usando preg_match ou filter_var para validar números de telefone. Por exemplo, um regex básico como preg_match("/^[0-9]{3}-[0-9]{4}-[0-9]{4}$/", $phone) pode impor um padrão específico para uma única região.
No entanto, esses métodos básicos do PHP verificam apenas a sintaxe e não podem confirmar se um número é real. Depender exclusivamente de regex leva a falsos positivos porque não pode verificar a alcançabilidade ou o registro na plataforma. Além disso, o regex requer atualização constante para acomodar as mudanças nos formatos internacionais. Embora o filter_var seja excelente para padronizar números inteiros ou strings básicas, ele carece das regras complexas de telecomunicações necessárias para validar com precisão os códigos de discagem globais.
Passo 2: Formatando com libphonenumber-for-php
Para validar adequadamente a sintaxe e formatar os números para o padrão E.164, use a biblioteca giggsey/libphonenumber-for-php. A biblioteca giggsey/libphonenumber-for-php incorpora os metadados de telecomunicações do Google para regras de comprimento e país, garantindo que suas verificações de sintaxe locais sejam as mais precisas possíveis.
Falhar em formatar os números para E.164 antes de enviá-los a uma API pode causar erros de validação. O seguinte código PHP executável demonstra como analisar um lote de entradas brutas e formatá-las corretamente:
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);
Passo 3: Verificando a Alcançabilidade via API REST do NumberChecker.AI
Uma vez que seu lote de números esteja formatado para E.164, o próximo passo é verificar a alcançabilidade real. O NumberChecker.AI fornece uma API REST para verificação silenciosa e em tempo real da alcançabilidade de números de telefone e plataformas. O NumberChecker.AI suporta mais de 45 detectores de plataforma, incluindo iMessage, Viber e Apple.
O NumberChecker.AI foi projetado para verificação de lotes em massa via CSV/TXT ou API REST. Por exemplo, o verificador do iMessage aceita um lote mínimo de 2.000 números. Crucialmente, o NumberChecker.AI realiza verificações silenciosas sem notificar o proprietário da conta.
Aqui está um script PHP executável usando cURL para enviar seu lote formatado para a 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";
}
Limitações Honestas da Validação de Telefone
Ao construir um fluxo de trabalho de validação em PHP, é importante entender os limites das ferramentas que você está usando.
- Sintaxe vs. Alcançabilidade: As bibliotecas PHP podem confirmar apenas a sintaxe, não a alcançabilidade. Um número pode estar perfeitamente formatado de acordo com os metadados do Google, mas ainda estar desconectado ou inativo.
- Requisitos de Formatação: As verificações de API exigem formatação E.164 válida para funcionar corretamente. A entrada bruta do usuário deve sempre ser analisada localmente primeiro para evitar o desperdício de solicitações de API em strings malformadas.
- Foco no Processamento em Lote: O NumberChecker.AI é uma ferramenta de processamento em lote, não uma ferramenta de pesquisa de número único. Os fluxos de trabalho devem ser projetados para agregar números e enviá-los em massa (por exemplo, lotes de 1.000 a 2.000 no mínimo, dependendo do detector da plataforma) em vez de fazer solicitações HTTP individuais para cada registro de usuário.
Perguntas Frequentes (FAQ)
O PHP pode verificar nativamente se um número de telefone está ativo?
Não, métodos básicos do PHP como preg_match e filter_var verificam apenas a sintaxe e não podem confirmar se um número é real ou está ativo. Você deve usar uma API de terceiros para verificar a alcançabilidade real.
Qual é o melhor regex para números de telefone internacionais em PHP?
Depender exclusivamente de regex leva a falsos positivos porque não pode verificar a alcançabilidade ou o registro na plataforma, e requer atualização constante para formatos internacionais. Em vez de regex, use a biblioteca giggsey/libphonenumber-for-php para uma validação de sintaxe precisa.
Como formato números de telefone para E.164 em PHP?
Você pode formatar números de telefone para o padrão E.164 instalando a biblioteca giggsey/libphonenumber-for-php via Composer, analisando a entrada bruta usando PhoneNumberUtil::getInstance()->parse() e, em seguida, formatando-a com PhoneNumberFormat::E164.
Comece com o NumberChecker.AI
Experimente o NumberChecker.AI gratuitamente — 1.000 verificações ao se inscrever, sem necessidade de cartão de crédito.
Pronto para começar?
Experimente nosso serviço de verificação de números WhatsApp e veja a diferença que dados limpos fazem.