Bom dia amigos, preciso resolver um problema mas esta dificil…
tenho que montar uma expressa regular para aceitar letras maisculas, minuscula e 0/9 porem obriga-los pelo menos um desses caracteres exemplo
se eu digitar fernando1 nao passa porem se difitar Fernando1 ou fernandO1 tudo bem é aceitavel, porem nao tenho ideia de como fazer ja
tentei [A-z][a-z][0-9] depois de A-Za-z0-9 mas nao rola
O mais significa ao menos 1 caractere de dentro das chaves
G
gr_marco
Pode tentar tbm
[\w\d]+
diego2005
Pelo que entendi, ele quer garantir pelo menos um caractere de cada grupo que ele falou, então acho que seria + - assim:
[a-z]+[A-Z]+[0-9]+
T+
Mantu
gr_marco:
Pode tentar tbm
[\w\d]+
Neste caso, não pode. É que o “\w” inclui o caractere underscore ("_").
Em tempo: “\w” engloba “\d”, tornando a expressão acima equivalente a \w+
G
gr_marco
É vero…
Não li direito o enunciado…
Fernando, vc poderia especificar melhor o que precisa?
Mantu
diego2005:
Pelo que entendi, ele quer garantir pelo menos um caractere de cada grupo que ele falou, então acho que seria + - assim:
[a-z]+[A-Z]+[0-9]+
T+
Também não funciona… A regex acima só aceita Strings em que pelo menos o primeiro caractere seja de “a” até “z”, termine com pelo menos um caratere entre “0” e “9”, e no meio tenha pelo menos um caractere de “A” até “Z”.
Infelizmente, creio que a solução buscada pelo OP não possa se dar através de regex. O mais próximo que consegui chegar foi:
E mesmo assim, ela não funciona legal, pois só aceita Strings que tenham pelo menos 1 letra maiúscula, uma minúscula e um número nesta ordem.
Talvez se você fizer uma combinação de regex como acima, alternando a ordem dos trechos significativos ("[A-Z]+", “[a-z]+” e “[0-9]+”) e intercalando-as com um “|”, pode até dar certo, mas que vai ficar super feio, não tenha dúvidas… Talvez seja melhor procurar uma outra alternativa para solucionar este problema…
É o que o Mantu falou anteriormente, essa expressão junta não vai funcionar, você tem que separá-la em 3.
T+
Mantu
diego2005:
É o que o Mantu falou anteriormente, essa expressão junta não vai funcionar, você tem que separá-la em 3.
T+
Mas não é só pegar a expressão [A-Z]+[a-z]+[0-9] e separar em 3…
Se simplesmente fazer uma regex [A-Z]+, uma [a-z]+ e outra [0-9]+, não vai funcionar como estão esperando, uma vez que estas três expressões são exclusivas entre si.
Se a intenção do foliveira81 é só aceitar Strings atendam simultaneamente às restrições:
[list]ter apenas letras ou números[/list]
[list]ter pelo menos 1 letra maiúscula[/list]
[list]ter pelo menos 1 letra minúscula[/list]
[list]ter pelo menos 1 dígito[/list]
Usar uma única expressão regular ficou muito complicado. Melhor usar três, como o Mantu indicou.
importjava.util.regex.*;classTestePadrao{publicstaticvoidmain(String[]args){// Não recomendaria usar um padrão só, mas os três do Mantu,// que são mais fáceis de manter.Patternpat=Pattern.compile(".*"+"("+"[A-Z]+[^A-Za-z0-9]*[a-z]+[^A-Za-z0-9]*[0-9]+"+"|"+"[a-z]+[^A-Za-z0-9]*[A-Z]+[^A-Za-z0-9]*[0-9]+"+"|"+"[0-9]+[^A-Za-z0-9]*[a-z]+[^A-Za-z0-9]*[A-Z]+"+"|"+"[a-z]+[^A-Za-z0-9]*[0-9]+[^A-Za-z0-9]*[A-Z]+"+"|"+"[0-9]+[^A-Za-z0-9]*[A-Z]+[^A-Za-z0-9]*[a-z]+"+"|"+"[A-Z]+[^A-Za-z0-9]*[0-9]+[^A-Za-z0-9]*[a-z]+"+")"+".*");String[]fileStr={"Marcelo23",// bate"23Marcelo",// bate"jaj@asdas33",// não bate"josé da silva",// não bate"12 tiradentes 23",// não bate"12 Tiradentes 23",// bate};for(inti=0;i<fileStr.length;++i){if(pat.matcher(fileStr[i]).matches()){System.out.println(fileStr[i]);}}}}
T
thingol
Um pouco mais simples:
importjava.util.regex.*;classTestePadrao{publicstaticvoidmain(String[]args){// Não recomendaria usar um padrão só, mas os três do Mantu,// que são mais fáceis de manter.Patternpat=Pattern.compile(// ".*"+"("+"[A-Z]+.*[a-z]+.*[0-9]+"+"|"+"[a-z]+.*[A-Z]+.*[0-9]+"+"|"+"[0-9]+.*[a-z]+.*[A-Z]+"+"|"+"[a-z]+.*[0-9]+.*[A-Z]+"+"|"+"[0-9]+.*[A-Z]+.*[a-z]+"+"|"+"[A-Z]+.*[0-9]+.*[a-z]+"+")"+".*");String[]fileStr={"Marcelo23",// bate"23Marcelo",// bate"jaj@asdas33",// não bate"josé da silva",// não bate"12 tiradentes 23",// não bate"12 Tiradentes 23",// bate};for(inti=0;i<fileStr.length;++i){if(pat.matcher(fileStr[i]).matches()){System.out.println(fileStr[i]);}}}}
F
foliveira81
Valeu Galera pela força ajudou muito, vou testar que nosso amigo thingol passou…
e depois disso estudar mais sobre expressao regular heheheh pq sou bem fraquinho nisso pois nunca tinha dado valor hehehe… agora sei o quanto é tao poderoso mesmo tendo algumas particularidades.