/** * Formata um numero de telefone brasileiro ou retorna false, caso nao consiga * @param string $telefone Numero a ser formatado * @param string $codigo_padrao Codigo DDD padrao (caso o telefone nao possua) * @return string Numero formatado no padrao "+55 (DD) XXXX-XXXX", ou false em caso de falha */ function formatar_telefone_br($telefone, $codigo_padrao) { // Checar se ja' está no padrao if (preg_match('/^\+55 \([\d]{2}\) ([\d]{4})\-([\d]{4})$/i', $telefone)) { return $telefone; } $len = strlen($telefone); // Buscar apenas os numeros $total_numeros = 0; $numeros = ''; for ($i = 0; $i < $len; $i++) { $c = $telefone[$i]; if (ctype_digit($c)) { $numeros .= $c; $total_numeros += 1; } } // Analisar de acordo com quantidade de numeros informados switch ($total_numeros) { // Se informou pais, zero, operadora, DDD e numero // 55 0PPDD XXXX XXXX case 15: if (preg_match('/^(55)0[\d]{2}([\d]{2})([\d]{4})([\d]{4})$/', $numeros, $match)) { return sprintf('+%02d (%02d) %04d-%04d', $match[1], $match[2], $match[3], $match[4]); } return false; // Se informou pais, operadora, DDD e numero // 55 PPDD XXXX XXXX case 14: if (preg_match('/^(55)[\d]{2}([\d]{2})([\d]{4})([\d]{4})$/', $numeros, $match)) { return sprintf('+%02d (%02d) %04d-%04d', $match[1], $match[2], $match[3], $match[4]); } return false; // Se informou pais, zero, DDD e numero // 55 0DD XXXX XXXX // Se informou zero, operadora, DDD e numero // 0PPDD XXXX XXXX case 13: if (preg_match('/^(55)0([\d]{2})([\d]{4})([\d]{4})$/', $numeros, $match)) { return sprintf('+%02d (%02d) %04d-%04d', $match[1], $match[2], $match[3], $match[4]); } elseif (preg_match('/^0[\d]{2}([\d]{2})([\d]{4})([\d]{4})$/', $numeros, $match)) { return sprintf('+55 (%02d) %04d-%04d', $match[1], $match[2], $match[3]); } return false; // Se informou pais, DDD e numero // 55 DD XXXX XXXX case 12: if (preg_match('/^(55)([\d]{2})([\d]{4})([\d]{4})$/', $numeros, $match)) { return sprintf('+%02d (%02d) %04d-%04d', $match[1], $match[2], $match[3], $match[4]); } return false; // Se informou zero, DDD e numero // 0DD XXXX XXXX case 11: if (preg_match('/^0([\d]{2})([\d]{4})([\d]{4})$/', $numeros, $match)) { return sprintf('+%02d (%02d) %04d-%04d', 55, $match[1], $match[2], $match[3]); } return false; // Se informou DDD e numero // DD XXXX XXXX case 10: if (preg_match('/^([\d]{2})([\d]{4})([\d]{4})$/', $numeros, $match)) { return sprintf('+%02d (%02d) %04d-%04d', 55, $match[1], $match[2], $match[3]); } return false; // Se informou numero // XXXX XXXX case 8: if (preg_match('/^([\d]{4})([\d]{4})$/', $numeros, $match)) { return sprintf('+%02d (%02d) %04d-%04d', 55, $codigo_padrao, $match[1], $match[2]); } return false; } return false; }