2016-12-08 1 views
0

Ich brauche eine Regex, die unter Bedingungen

Bedingung 1 entsprechen muss: ATLEAST 1 Groß Alphabet
Bedingung 2: 3 ATLEAST 1 Kleinbuchstaben
Zustand: Atleast 1 Stelle
Bedingung 4: Sonderzeichen sind optional, aber wenn Sonderzeichen in Eingabestring vorhanden ist, dann muss es unter diesen Zeichen sein: :.;,?!/\_-()][#"'&$*%+=}{Benötigen Sie für die Kennwortüberprüfung mit Sonderzeichen als optionale Kriterien regex: java

Below Programm erfüllt Bedingung 1, Zustand 2, Zustand 3, aber nicht Bedingung 4

Für Bedingung 4 überprüft diese Regex auf mindestens 1 Sonderzeichen, ich möchte diese Prüfung optional sein.

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class PasswordValidation { 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     String loginpwd = "sssaQjs#d123"; 
     String LOGIN_PASSWORD_VALIDATION = "(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[\\\\!\"#$%&()*+,./:;=?\\[\\]_{}])(?=\\S+$).{8,15}"; 
     Pattern password_Pattern = Pattern.compile(LOGIN_PASSWORD_VALIDATION); 
     Matcher password_matcher = password_Pattern.matcher(loginpwd);  

     if(password_matcher.matches()) 
      System.out.println("match"); 
     else 
      System.out.println("doesnot match"); 
    } 
} 

Antwort

-1

die drei Charakterklassen die Zeichenklasse von Sonderzeichen würde es als Zugabe tun in

String LOGIN_PASSWORD_VALIDATION = "(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?!.*[^\\\\!\"#$%&()*+,./:;=?\\[\\]_{}A-Za-z0-9])\\S{8,15}"; 

Es behauptet, dass es nicht ein Zeichen außerhalb der [\\\\!\"#$%&()*+,./:;=?\\[\\]_{}A-Za-z0-9] Klasse. Beachten Sie den negativen Blick voraus.

Da die Zeichenklasse Buchstaben und Ziffern enthält, sind die Sonderzeichen optional.

+0

ich verstehe nicht – divine

+0

ok habe deinen Punkt. Aber es gibt ein anderes Problem, das ich hier in der gleichen Regex konfrontiert bin – divine

+0

@divine pls überprüfen Sie die Bearbeitung. –

0
public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    String password = "sssaQjs#d123"; 
    boolean hasUppercase = !password.equals(password.toLowerCase()); 
    boolean hasLowercase = !password.equals(password.toUpperCase()); 
    boolean hasDigit = password.matches(".*[0-9].*"); 
    boolean hasSpecial = password.matches(".*<all special characters escaped as alternative>.*"); 

    if(hasUppercase && hasLowercase && hasDigit && hasSpecial) 
     System.out.println("match"); 
    else 
     System.out.println("doesnot match"); 
} 
+1

Xenteros, ich werde überprüfen, ob das funktioniert und Sie aktualisieren – divine

+0

Stellen Sie sicher, dass Sie (# | @ | ....) eingeben und double escape \. Sie müssen es für Java und für Regex entkommen – xenteros