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?
Obrigado.
Opa, e aí beleza ?
Então, não tenho muito conhecimento sobre regex, mas vou tentar explicar:
Temos o exemplo:
guillherme@email.com
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.
Você também pode ler um pouco sobre expressões regulares nos links:
http://download.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html
http://download.oracle.com/javase/1.5.0/docs/api/java/util/regex/Matcher.html
flws…
Oi Guilherme. Puxa, perfeita explicação. Muito obrigado!
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 silva@gmail.com” (só lembrando que a pesquisa vai bater para silva@gmail.com, então é preciso ver se a expressão pegou todo o conteúdo digitado).
[quote=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 silva@gmail.com” (só lembrando que a pesquisa vai bater para silva@gmail.com, então é preciso ver se a expressão pegou todo o conteúdo digitado).[/quote]
Obrigado pelo complemento! ^^