[RESOLVIDO]Regex: Qual o pattern para não permitir um caracter especifico repita em sequênci

5 respostas
Z

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 :wink:

5 Respostas

Rodrigo_Sasaki

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

Oi,

Via programa:

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

Tchauzin!

Z

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?

sim, não pode repetir

por exemplo: o e-mail abaixo é inválido e justamente ele que quero impedir

[email removido]

Outros exemplos:

Valid email addresses

fonte:http://en.wikipedia.org/wiki/Email_address

Rodrigo_Sasaki

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.

Z

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})?)$

Criado 31 de maio de 2012
Ultima resposta 31 de mai. de 2012
Respostas 5
Participantes 3