2 votes

Comment vérifier s'il y a au moins : deux lettres, un chiffre et un caractère spécial ?

Comment vérifier s'il y a au moins : deux lettres, un chiffre et un caractère spécial en java ? Voici mon code mais je ne sais pas si je suis dans la bonne direction.

public static boolean validarCodigo(String codigo){
    //return Pattern.compile("[abc]").matcher("ba").find();
    boolean ContainsAtLeastTwoLetters = Pattern.compile("[0-9]").matcher(codigo).find();
    boolean tieneAlmenosDosLetras = Pattern.compile("('/[a-zA-   Z]/')").matcher(codigo).find();
    boolean ContainsAtLeastOneSpecialChar; = Pattern.compile ("'/[^a-zA-Z\\d]/'").matcher(codigo).find();       

    return ContainsAtLeastOneDigit && ContainsAtLeastTwoLetters && ContainsAtLeastOneSpecialChar;

2voto

ddmps Points 4300

Votre regex semble un peu faux mais vous avez fait du bon travail. Une chose importante est que vous ne vérifiez que les éléments suivants un chiffre et lettre. Pour résoudre ce problème, essayez les regex suivantes :

boolean containsAtLeastTwoLetters = Pattern.compile("[0-9].*[0-9]").matcher(codigo).find();
boolean tieneAlmenosDosLetras = Pattern.compile("[a-zA-Z].*[a-zA-Z").matcher(codigo).find();
boolean containsAtLeastOneSpecialChar = Pattern.compile ("[^a-zA-Z\\d]").matcher(codigo).find();   

J'ai pris la liberté de reformater les variables selon la pratique standard de Java (likeThis au lieu de LikeThis).

1voto

Juned Ahsan Points 33217
public static boolean validarCodigo(String codigo){

   Pattern letter = Pattern.compile("[a-zA-z]");  
   Pattern digit = Pattern.compile("[0-9]");  
   // add or remove whatever special characters are permissible in your case
   Pattern special = Pattern.compile ("[!@#$%&*()_+=|<>?{}\\[\\]~-]"); 

   Matcher hasLetter = letter.matcher(codigo);  
   Matcher hasDigit = digit.matcher(codigo);  
   Matcher hasSpecial = special.matcher(codigo);

   return hasLetter.find() && hasDigit.find() && hasSpecial.find();

}

1voto

Bohemian Points 134107

Vous pouvez utiliser des "look ahead" pour le faire en une seule ligne :

boolean hasAllThree = codigo.matches("^(?=.*[^a-zA-Z\\d])(?=(.*\\d){2})(?=(.*[a-zA-Z]){2}).*");

0voto

Pshemo Points 34648

D'après votre commentaire, il doit l'être :

  • au moins un chiffre,
  • deux lettres
  • et un caractère spécial ``

Donc votre chaîne entière doit correspondre exactement à chacune de ces regex.

  • ^.*[0-9].*$
  • ^.*[a-zA-Z].*[a-zA-Z].*$
  • ^.*[^a-zA-Z\\d].*$

Voici un moyen original :)

Utilisation de anticipation mécanisme (?=...) vous pouvez créer une regex qui vérifiera si votre chaîne correspond à toutes ces conditions. Cela peut ressembler à ça :

^(?=.*[0-9])(?=.*[a-zA-Z].*[a-zA-Z])(?=.*[^a-zA-Z\\d]).*$

Maintenant pour vérifier si votre chaîne est exactement la même que celle décrite dans cette regex utilisez matches méthode. La méthode BTW ajoutera également ^ au départ et $ à la fin de votre regex pour que vous n'ayez pas à les écrire.

Votre code de test peut ressembler à ceci

codigo.matches("^(?=.*[0-9])(?=.*[a-zA-Z].*[a-zA-Z])(?=.*[^a-zA-Z\\d]).*$")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X