Como Validar Números de Telefone em PHP: Do Regex à API de Alcançabilidade

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.

Experimentar ferramenta grátis Fale Conosco