Ir para conteúdo
Fórum Script Brasil
  • 0

Identificar vírgula dentro do texto


MTavares

Pergunta

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 por MTavares
Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0

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 por DaniMant
Link para o comentário
Compartilhar em outros sites

  • 0

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);	

Link para o comentário
Compartilhar em outros sites

  • 0

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);

Link para o comentário
Compartilhar em outros sites

  • 0

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 por MTavares
Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...