Olá, então, eu estava lendo um artigo, e me deparei com um código que valida um e-mail através de uma expressão regular. A expressão é a seguinte:
.+@.+\\.[a-z]+
eu gostaria de saber qual é o critério, qual é a lógica dessa expressão regular. O trecho [a-z], até onde sei, é algo dizendo que vai da letra ‘a’ até a letra ‘z’, o arroba parece ser o “separador”, que indica que deve ter um arroba no meio da string e tal. Bom, alguém poderia explicar melhor?
Então, não tenho muito conhecimento sobre regex, mas vou tentar explicar:
Temos o exemplo:
[emailremovido]
Podemos separá-lo em várias partes:
o nome do email (“guilherme”)
o arroba ("@")
nome do servidor do email (“email”)
o ponto que separa o “servidor” do “com” (".")
o fim da string… (“com”)
Primeiramente, você tem que conhecer as definições:
Quando você utiliza o caractere “.” (ponto), representa que ele aceita QUALQUER caractere. (ex: a,5,_,etc…)
O caractere “+” (mais) representa um quantificador: aceita 1…n vezes o caractere precedente.
Passo a Passo:
No ínicio, temos “.+”: ele que representa que vai aceitar QUAISQUER caracteres, que tenha pelo menos 1 caractere. (Parte 1: guilherme@email.com)
O uso do arroba(@) representa que o email deve possuir esse caractere. (Parte 2: guilherme@email.com)
Depois temos novamente o “.+”, que quer dizer que aceita qualquer caractere, em qualquer quantidade, mas com pelo menos 1 caractere. (Parte 3: guilherme@email.com)
Agora, é preciso especificar que deve existir um ponto (.) no email. Como o caractere ponto já é utilizado na sintaxe do regex, é preciso utilizar o \ imediatamente antes,
para representar que você quer um PONTO ali, e não QUALQUER caractere. (Parte 4: guilherme@email.com)
A seguir temos: “[a-z]+”. A parte do “[a-z]” significa que aceita um caractere, que esteja entre A e Z, no alfabeto. Ao utilizar em conjunto com o quantificador “+”, representa
que aceita entre 1…n caracteres que estejam entre A e Z. (Parte 5: guilherme@email.com )
Resumindo:
Deve ter um nome de email de 1…n caracteres;
Que contenha um @(arroba);
Deve ter um nome de servidor de 1…n caracteres;
Que contenha um .(ponto);
Deve ter o “resto” do nome do servidor, de 1…n caracteres (e os caracteres estão limitados entre A e Z).
Meio confuso a explicação ?!
Tentei explicar aí… talvez alguém explique de uma forma melhor.
Oi Guilherme. Puxa, perfeita explicação. Muito obrigado!
M
marcio_gs
Vale lembrar que o . representa qualquer caractere(exceto quebra de linha), como foi explicado pelo Guilherme. Isso significa que endereços como " @gmail.com" são aceitos. Você poderia mudar a expressão para dizer o que você não quer aceitar. Para isso basta informar eles em uma lista e dizer que você não espera eles. Uma lista é representada por colchetes. Para negar a lista é utilizar o acento circunflexo. Por exemplo, se você quiser qualquer nome que não tenha espaços, quebras de linhas e similares, use:
[^\t\s\r\n]+
Isso é uma lista que pega qualquer cactere que não seja “coisa em branco”. Evitan e-mails como “joao da [email removido]” (só lembrando que a pesquisa vai bater para [email removido], então é preciso ver se a expressão pegou todo o conteúdo digitado).
Andre_Rosa
marcio_gs:
Vale lembrar que o . representa qualquer caractere(exceto quebra de linha), como foi explicado pelo Guilherme. Isso significa que endereços como " @gmail.com" são aceitos. Você poderia mudar a expressão para dizer o que você não quer aceitar. Para isso basta informar eles em uma lista e dizer que você não espera eles. Uma lista é representada por colchetes. Para negar a lista é utilizar o acento circunflexo. Por exemplo, se você quiser qualquer nome que não tenha espaços, quebras de linhas e similares, use:
[^\t\s\r\n]+
Isso é uma lista que pega qualquer cactere que não seja “coisa em branco”. Evitan e-mails como “joao da [email removido]” (só lembrando que a pesquisa vai bater para [email removido], então é preciso ver se a expressão pegou todo o conteúdo digitado).