2

Javaで少なくとも2つの文字、1つの数字、1つの特殊文字があるかどうかを確認する方法は? これが私のコードですが、正しい方向に進んでいるかどうかはわかりません。

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;
4

4 に答える 4

2

あなたの正規表現は少しずれているようですが、うまくいきました。重要なことの 1 つは、数字と文字を1 つだけチェックしていることです。これを解決するには、次の正規表現を試してください。

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

自由に変数を Java 標準の慣例 (LikeThis ではなく likeThis) に再フォーマットしました。

于 2013-05-19T00:56:51.813 に答える
1
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();

}
于 2013-05-19T00:51:50.673 に答える
1

先読みを使用して、1 行で実行できます。

boolean hasAllThree = codigo.matches("^(?=.*[^a-zA-Z\\d])(?=(.*\\d){2})(?=(.*[a-zA-Z]){2}).*");
于 2013-05-19T01:06:48.387 に答える