Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Preciso remover dos textos telefones, que podem estar nos formatos (XX)XXXX-XXXX ou (XX)XXXXXXXX alguém sabe alguma solução para encontrar se existe algum telefone em uma string
Este código funcionou muito bem, muito obrigado, adaptei para substituir outras variações com o ponto, nove dígitos
$texto = '(027)9981.6187 aaaa 99999-9999 bbb (027)9981-6189 ccc (27)9981-6186 ddd (27)99816185 eee (27)99981-6184 fff';
echo preg_replace('/\([0-9]{2,3}\)[0-9\-.]{8,10}/', '*', $texto);
Mas não consigo prevê se não tiver o DDD, se for um número tipo 99999-9999 ele não tira, qual seria a modificação neste código?Quando se escreve {8,10}, você está dizendo quantos podem vir, então é só aumentar a quantidade
Aumentar a quantidade de matches não resolveria devido aos parênteses. Eu faria assim:
/(\([0-9]{2}\))? ?[0-9]{4,5}-?[0-9]{4}/
Usar [0-9\-.]{8,10} removeria números como 12345678, que poderia representar o ID de um produto que você vende, por exemplo. Por isso o tratamento pode ir além de uma simples ER. Poderia ser necessário validar prefixos, considerar palavras que estejam antes ou depois do número etc.
Há um tópico discutindo isso: http://forum.imasters.com.br/topic/528732-regex-telefone-validando-errado-onde-esta-o-erro
Realmente, pensei que erá só a quantidade de números, Você pode usar dois preg_replace, um para quando tiver parenteses e outro para quando não tiver
Realmente, pensei que erá só a quantidade de números, Você pode usar dois preg_replace, um para quando tiver parenteses e outro para quando não tiver
No quesito desempenho, isso é pior, pois é necessário compilar duas expressões regulares, o que é um tanto custoso pra CPU. É melhor usar o ? na ER para tornar o DDD opcional
Concordo plenamente, fazer os dois seria só pra ficar mais facil dele entender
Quando o telefone está colado nos parenteses do DDD tipo assim, (27)9999-9999 funciona perfeito, mas se tiver um espaço entre o parenteses e o núemro, assim (27) 9999-9999 não funciona, como eu adicionaria na expressão para detectar quando tiver um espaço ali?
qual ER está usando?
A que eu postei prevê isso:
>
/(\([0-9]{2}\))? ?[0-9]{4,5}-?[0-9]{4}/
o trecho em vermelho torna o espaço condicional. Pode ou não haver
Funcionou perfeito, /\([0-9]{2,3}\)? ?[0-9\-.]{0,1}? ?[0-9\-.]{8,10}/
Agora só não consigo deixar os parênteses do DDD opcionais também, para detectar um telefone só com números, por exemplo 9999-9999 ou 99999999
Sua ER está configurada pra deixar só o segundo parêntese opcional. Para corrigir:
/\(?[0-9]{2,3}\)? ?[0-9\-.]{0,1}? ?[0-9\-.]{8,10}/
Faça assim: http://codepad.org/fu10nxLB