Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde pessoal!
Estou querendo que seja somente aceito: letras, números, pontos, hifens e sublinhados(underline).
E também não quero que aceite @site.com.br caso ele digite.
Estou tendo utilizar a função abaixo, porém não tenho ideia como mexer na expressão regular:
function validaEmail($mail)
{
if(preg_match("/^([[:alnum:]_.-]){3,}([[:lower:][:digit:]_.-]{3,})(.[[:lower:]]{2,3})(.[[:lower:]]{2})?$/", $mail))
{
return 'Correto!';
}
else
{
return 'Errado!';
}
}
$cliente_email = 'contato.cliente';
echo validaEmail($cliente_email);
Alguém poderia me ajudar nesta validação?
Desde já agradeço!>
4 horas atrás, marcosmarcolin disse:
Tem muito exemplo pronto por aí com expressões regulares, muito bem explicado. Veja: http://blog.thiagobelem.net/validacao-de-e-mail-no-php-com-expressoes-regulares
Eu tinha visto e testado este código antes porém não atendeu minhas expectativas.
@Dr. Programador, joia!
O PHP já tem uma função que faz essa validação:
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
return true;
}
return false;>
13 horas atrás, EdCesar disse:
@Dr. Programador, joia!
O PHP já tem uma função que faz essa validação:
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
return true;
}
return false;
Desculpe, essa função nativa do php só valida a existência do @ domínio válido.
Fiz teste com essa função e ainda sim permitiu caracteres inválidos como: # % * ", etc...<?php
function mailCheck($subject) {
if (preg_match('/^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{3})$/', $subject)) {
return (true);
}
}
var_dump(mailCheck("fulano@fulano.com")); // True O e-mail é valido
var_dump(mailCheck("fulano@fulano")); // False O e-mail não é valido
var_dump(mailCheck("fulano")); // False O e-mail não é valido
var_dump(mailCheck("fulano123@fulano.aaa")); // True O e-mail é valido
var_dump(mailCheck("#fulano@fulano.com")); // False O e-mail não é valido
var_dump(mailCheck("fulano#fulano.com")); // False O e-mail não é valido
/ E por aí vai se não for um e-mail válido sempre não haverá retorno pela função /
Pessoal, beleza!
@Dr. Programador, o FILTER_VALIDATE_EMAIL não verifica apenas se existe o arroba. De acordo com a especificação, # e % são caracteres validos, para um email. Se o provedor x,y,z não permite que se utilize, ai é outra historia.
A especificação sobre o formato de um email, esta na RFC 5322 https://www.ietf.org/rfc/rfc5322.txt
Este wiki é bom:
https://en.wikipedia.org/wiki/Email_address#Local-part
Resumo:
O formato de um email é local-part@domain onde o local-parte pode ter até 64 caracteres e o domínio pode ter no máximo 255 caracteres
O local-parte pode usar qualquer um desses caracteres ASCII :
-
maiúsculas e minúsculas latino letras Apara Ze apara z;
-
dígitos 0 para 9;
-
caracteres imprimíveis diferentes de letras e algarismos !#$%&'*+-/=?^_`{|}~;
-
ponto ., desde que não seja o primeiro ou último caractere, a menos que seja citado, e desde que não apareça consecutivamente, a menos que seja citado (por exemplo, John..Doe@example.com não é permitido, mas "John..Doe"@example.comé permitido);
Exemplos de regex que respeite a RFC 5322 você pode encontrar aqui [https://emailregex.com/](https://emailregex.com/)
Fazendo alguns testes básicos com **FILTER_VALIDATE_EMAIL, **ele fez as seguintes validações:
t..este@test.com // invalido
.este@test.com // invalido
t.este@test.com // **valido**
#este@test.com // **valido**
%este@test.com // **valido**
O que esta ok, de acordo com a especificação.
Se você vai validar emails de provedores específicos, que não permitem caracteres como "#$%&'", então não deveria usar o **FILTER_VALIDATE_EMAIL, **a questão que estou levantando, é que o PHP tenta validar os emails, com base na especificação.
Não sei até que ponto essa validação nativa do PHP, respeita a RFC, se 100% ou menos.
Se alguém já investigou isso, por favor, comente ai!
Tem muito exemplo pronto por aí com expressões regulares, muito bem explicado. Veja: http://blog.thiagobelem.net/validacao-de-e-mail-no-php-com-expressoes-regulares
https://www.codigofonte.com.br/codigos/validacao-completa-de-e-mail-em-php-com-verificacao-de-dominio