Boa tarde.
Estou tentando montar um pattern para não permitir que dentro de uma string um ponto (.) repita em sequência, porém não consegui. Vou colocar abaixo parte do pattern que tentei, ele serve para validar um e-mail de acordo com o padrão da RFC, que entre outras coisas não permite que um ponto repita em sequência na parte local do e-mail. Eu tentei usar o apache commons que tem um EMailValidator, essa parte ele faz bem, mas tem uma outra que ele não obedece. Essa parte fala que no domínio não é permitido "_", por isso tive que fazer o meu.
parte que olha os caracteres :
([-!#\\$%'\\*\\+/=\\?\\^`\\{\\}\\|~\\w\\.)]*)
com o teste para verificar se o ponto repetiu
([-!#\\$%'\\*\\+/=\\?\\^`\\{\\}\\|~\\w\\.]?|[\\.\1])*
A validação completa:
^[!#\\$%'\\*\\+/=\\?\\^`\\{\\}\\|~\\w]((([-!#\\$%'\\*\\+/=\\?\\^`\\{\\}\\|~\\w\\.]?|[\\.\1])*)[!#\\$%'\\*\\+/=\\?\\^`\\{\\}\\|~\\w]@{1}(([a-zA-Z\\d\\-]{1,67})|([a-zA-Z\\d\\-]+\\.[a-zA-Z\\d\\-]{1,67}))\\.(([a-zA-Z]{2,4})(\\.[a-zA-Z]{2})?)$)
se alguém souber o esquema ai da uma forcinha
Cara, acho que fica mais fácil se você falar as regras da sua validação, os padrões que tem que ser seguidos, e a gente partir daí.
até onde entendi é um Pattern pra validar emails, e em algum lugar dele não podem haver pontos repetidos, é isso?
lina
Maio 31, 2012, 12:20pm
#3
Oi,
Via programa:
[code]String texto = “…”;
Pattern lo_pattern = Pattern.compile(texto.charAt(0)+"{"+texto.length()+"}");
Matcher lo_matcher = lo_pattern.matcher(texto);
System.out.println(lo_matcher.find());[/code]
Tchauzin!
[quote=digaoneves]Cara, acho que fica mais fácil se você falar as regras da sua validação, os padrões que tem que ser seguidos, e a gente partir daí.
até onde entendi é um Pattern pra validar emails, e em algum lugar dele não podem haver pontos repetidos, é isso?[/quote]
sim, não pode repetir
por exemplo: o e-mail abaixo é inválido e justamente ele que quero impedir
Abc..123@example.com
Outros exemplos:
Valid email addresses
niceandsimple@example.com
simplewith+symbol@example.com
less.common@example.com
a.little.more.unusual@dept.example.com
user@[IPv6:2001:db8:1ff::a0b:dbd0]
"much.more\ unusual"@example.com
"very.unusual.@.unusual.com"@example.com
"very.(),:;<>[]\".VERY.\"very@\\\ \"very\".unusual"@strange.example.com
0@a
!#$%&'*+-/=?^_`{}|~@example.org
"()<>[]:,;@\\\"!#$%&'*+-/=?^_`{}|\ \ ~\ \ \ ?\ \ \ ^_`{}|~.a"@example.org
""@example.org
postbox@com (top-level domains are valid hostnames)
Invalid email addresses
Abc.example.com (an @ character must separate the local and domain parts)
Abc.@example.com (character dot(.) is last in local part)
Abc..123@example.com (character dot(.) is double)
A@b@c@example.com (only one @ is allowed outside quotation marks)
a"b(c)d,e:f;g<h>i[j\k]l@example.com (none of the special characters in this local part is allowed outside quotation marks)
just"not"right@example.com (quoted strings must be dot separated, or the only element making up the local-part)
this is"not\allowed@example.com (spaces, quotes, and backslashes may only exist when within quoted strings and preceded by a slash)
this\ still\"not\\allowed@example.com (even if escaped (preceded by a backslash), spaces, quotes, and backslashes must still be contained by quotes)
fonte:http://en.wikipedia.org/wiki/Email_address
não pode ser algo assim? “\.[^\.]?”
temos um ponto, a frente dele pode ou não vir um caractere, mas se vier, não pode ser um ponto.
vlw galera…
eu consegui, pelo menos para os casos mais usuais com o pattern abaixo… mas para aqueles e-mails bizarros que são válidos eu não consegui, mas isso deixa para lá
^[!#\\$%'\\*\\+/=\\?\\^`\\{\\}\\|~\\w]+(?:\\.[\\s-!#\\$%'\\*\\+/=\\?\\^`\\{\\}\\|~\\w]+)*@{1}(([a-zA-Z\\d\\-]{1,67})|([a-zA-Z\\d\\-]+\\.[a-zA-Z\\d\\-]{1,67}))\\.(([a-zA-Z]{2,4})(\\.[a-zA-Z]{2})?)$