MTavares Postado Março 20, 2014 Denunciar Share Postado Março 20, 2014 (editado) Saudações colegas. Estou desenvolvendo uma pequena aplicação em PHP onde o usuário pode "indicar amigos" para um evento. O delimitador é uma vírgula (,). Usei o seguinte código: for($c = 0; $c <= $contar; $c++){ list($usuario, $dominio) = explode(",", trim($explodir[$c])); $resultado = checkdnsrr($dominio, 'MX'); // Aqui faço o disparo } O que preciso é identificar se realmente o usuário está usando a vírgula para separar os e-mails. Como eu faria isso em PHP? Obrigado! Editado Março 20, 2014 por MTavares Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 DaniMant Postado Março 20, 2014 Denunciar Share Postado Março 20, 2014 (editado) Na minha rápida logica, armazenaria todos os emails em um array, depois trocaria todas as virgulas por 1 espaço. Depois criaria um replace com um array com 3, 2, 1 espaços trocando todos eles pela pela virgula str_replace(array(' ',' ',' '), ',', $c) Os que ele colocou a virgula se tornaria em 1 espaço, e o que ele não colocou a virgula é certo que ele deu pelo menos 1 espaço, para garantir você coloca um array com mais espaços e pode acrescentar também : ou ; para eliminar os erros, ai todos teriam virgula. Editado Março 20, 2014 por DaniMant Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 MTavares Postado Março 20, 2014 Autor Denunciar Share Postado Março 20, 2014 Olá DaniMant. Obrigado pela resposta. Mas se no caso ele não colocar um espaço e sim outro caractere? Se tivesse uma função que identificasse diretamente, seria ótimo. O HTML é: <textarea name="EmailsIndicados" style="width:250px; height:100px"></textarea> E o PHP que pega os valores é: $emails = trim($_POST["EmailsIndicados"]); $explodir = explode(",",$emails); Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 DaniMant Postado Março 20, 2014 Denunciar Share Postado Março 20, 2014 É melhor você criar uma expressão regular e criar uma função para isso então, ou você pode colocar tudo dentro desse array, se ele contrar ele mudar por virgula. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 MTavares Postado Março 20, 2014 Autor Denunciar Share Postado Março 20, 2014 Entendi....mas nesse caso teria que ser antes do explode... mas não tem nenhuma função nativa do PHP que faça essa verificação? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 DaniMant Postado Março 20, 2014 Denunciar Share Postado Março 20, 2014 Você pode criar uma function com o preg_match(), alguma coisa assim. public static function Email($Email) { $email = (string) $Email; $formata = '/[a-z0-9_\.\-]+@[a-z0-9_\.\-]*[a-z0-9_\.\-]+\.[a-z]{2,4}$/'; if(preg_match($formata, $email)): return TRUE; else: return FALSE; endif; } E para validar o e-mail pode utilizar o filter_var($email, FILTER_VALIDATE_EMAIL); Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 MTavares Postado Março 20, 2014 Autor Denunciar Share Postado Março 20, 2014 Perdão DaniMant. Essa função que você criou é para verificar se a variável contém vírgulas? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 DaniMant Postado Março 20, 2014 Denunciar Share Postado Março 20, 2014 Verifica se é um e-mail válido, para verificar a virgula faça o replace antes do explode. Afinal se você deixar aberto para digitar o que quiser num campo desse sem validação é meio complicado. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 MTavares Postado Março 20, 2014 Autor Denunciar Share Postado Março 20, 2014 (editado) sim..entendi... vi que essa função nativa do PHP faz essa verificação. $texto = $_POST["EmailsIndicados"]; $busca = ","; if(strstr($texto, $busca) == FALSE){ echo "o arquivo não contém vírgulas"; }else{ echo "ok"; } Só que quando coloco: email1; email2, email3* ele dá o OK porque tem uma vírgula no texto... mas quando troco a vírgula por outro caractere, ele funciona. Pensei em percorrer com um array e colocar o strstr(). Editado Março 20, 2014 por MTavares Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 DaniMant Postado Março 20, 2014 Denunciar Share Postado Março 20, 2014 strpos também faz isso, mas você sempre vai ter virgula, o problema é saber aonde não tem a virgula, e no caso do replace, basta chegar e implementar. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 MTavares Postado Março 21, 2014 Autor Denunciar Share Postado Março 21, 2014 beleza DaniMant. Vou testar aqui e qualquer coisa volto aqui, combinado? Obrigado pela força.... Abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Markus Magnus Postado Março 22, 2014 Denunciar Share Postado Março 22, 2014 Isso aqui resolve o problema. <?php $exp = "[a-z\'0-9]+([._-][a-z\'0-9]+)*@([a-z0-9]+([._-][a-z0-9]+))+"; preg_match_all("/$exp/", $t, $emails); var_dump($emails[0]); Ta ai alguns testes para comprovar. <?php $teste[] = 'email1,email2,email3'; /* * array(0) { * } */ $teste[] = 'email1,email1@dominio1.com.br,email3'; /* * array(1) { * [0]=> * string(19) "email1@dominio1.com" * } */ $teste[] = 'email1@dominio1.com.br,email2@dominio1.com.br,email1@dominio2.com.br'; /* * array(3) { * [0]=> * string(19) "email1@dominio1.com" * [1]=> * string(19) "email2@dominio1.com" * [2]=> * string(19) "email1@dominio2.com" * } */ $teste[] = 'email1;email2,email3'; /* * array(0) { * } */ $teste[] = 'email1|email1@dominio1.com.br,email3'; /* * array(1) { * [0]=> * string(19) "email1@dominio1.com" * } */ $teste[] = 'email1@dominio1.com.br,email2@dominio1.com.br:email1@dominio2.com.br'; /* * array(3) { * [0]=> * string(19) "email1@dominio1.com" * [1]=> * string(19) "email2@dominio1.com" * [2]=> * string(19) "email1@dominio2.com" * } */ $teste[] = 'email1,email2|email3'; /* * array(0) { * } */ $teste[] = 'email1,email1@dominio1.com.br,email3'; /* * array(1) { * [0]=> * string(19) "email1@dominio1.com" * } */ $teste[] = 'email1@dominio1.com.br;email2@dominio1.com.br;email1@dominio2.com.br'; /* * array(3) { * [0]=> * string(19) "email1@dominio1.com" * [1]=> * string(19) "email2@dominio1.com" * [2]=> * string(19) "email1@dominio2.com" * } */ $exp = "[a-z\'0-9]+([._-][a-z\'0-9]+)*@([a-z0-9]+([._-][a-z0-9]+))+"; foreach ($teste as $t) { preg_match_all("/$exp/", $t, $emails); var_dump($emails[0]); } Depois com um array com os e-mails escritos da forma correta você pode fazer a verificação com checkdnsrr(). Abraços tudo de bom. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 MTavares Postado Abril 2, 2014 Autor Denunciar Share Postado Abril 2, 2014 Obrigado Markus Magno. Abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
MTavares
Saudações colegas.
Estou desenvolvendo uma pequena aplicação em PHP onde o usuário pode "indicar amigos" para um evento. O delimitador é uma vírgula (,). Usei o seguinte código:
O que preciso é identificar se realmente o usuário está usando a vírgula para separar os e-mails. Como eu faria isso em PHP?
Obrigado!
Editado por MTavaresLink para o comentário
Compartilhar em outros sites
12 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.