Caros bom dia, conheci o que era regex ontem…
Dei uma procurada aqui pelo fórum msm e encontrei vários artigos e sites interessantes sobre o assunto.
Preciso validar um campo login com as seguintes especificações:
“Seu login não deve conter espaços, letras maiúsculas, ter menos de 4 caracteres,
nem ter mais de 12, não pode conter caracteres especiais (exceto underscore),
não começar com numeral ou conter apenas underscore.”
Eu consegui montar a seguinte regex (sei que não esta o mais correto) mas foi o que consegui assimilar de ontem pra hoje:
Pattern p = Pattern.compile("^[a-z_][a-z0-9_]{3,11}+$");
Aparentemente esta validando tudo, exceto o “ou conter apenas underscore”, não consigo ir adiante.
Alguém tem ideia de como resolver isso?
Pattern p = Pattern.compile("^([a-z_0-9]{3,11}|[^_]+)$");
espero que ajude[/quote]
Essa ainda não dá certo, a segunda parte da sua expressão meio que invalida a primeira. Se eu digitar vários espaços em branco a expressão irá casar com a String
a parte do underscore esta correta, ele não aceita somente underscore. Porém a primeira parte
não esta funcionando, não aceita nada. Testei com várias palavras mas não foi.
E só acrescentando um detalhe, aqui ele esta aceitando números na primeira casa né? e no caso não podeira.
Pattern p = Pattern.compile("(?=^[a-z_0-9]{3,11}$)(?=^(?![_]+)$)");
Cara vc conseguiu? Eu to com um problema bem parecido, não sei se alguém pode me ajudar.
Fora todas as validações que minha ER tem, ter letras, números etc, eu preciso ter certeza que números ou letras
se repetem dentro do campo no minimo 2 vezes.
Aparentemente é simples mas eu não estou conseguindo, se alguém puder da um help. Obrigado.
Nem sempre é possível ou prático colocar todas as regras em uma única expressão.
Por exemplo, para não permitir apenas underscores essa aqui funcionaria:
Pattern p = Pattern.compile("^([a-z][a-z0-9_]{3,11})|([a-z_][a-z0-9][a-z0-9_]{2,10})|([a-z_][a-z0-9_]{1}[a-z0-9][a-z0-9_]{1,9})|([a-z_][a-z0-9_]{2}[a-z0-9][a-z0-9_]{0,8})|([a-z_][a-z0-9_]{3}[a-z0-9][a-z0-9_]{0,7})|([a-z_][a-z0-9_]{4}[a-z0-9][a-z0-9_]{0,6})|([a-z_][a-z0-9_]{5}[a-z0-9][a-z0-9_]{0,5})|([a-z_][a-z0-9_]{6}[a-z0-9][a-z0-9_]{0,4})|([a-z_][a-z0-9_]{7}[a-z0-9][a-z0-9_]{0,3})|([a-z_][a-z0-9_]{8}[a-z0-9][a-z0-9_]{0,2})|([a-z_][a-z0-9_]{9}[a-z0-9][a-z0-9_]{0,1})|([a-z_][a-z0-9_]{10}[a-z0-9])$");
Totalmente ilegível!
Muito melhor seria manter a expressão original, e depois fazer o valor passar por uma segunda expressão para verificar se atende a regra do Somente Underscore.
No caso do rsg , tem mais alguns requisitos, que poderiam ser traduzidos em uma terceira expressão.