Ich vermute, dass der Regex unten durch das Umsehen verlangsamt wird, aber es sollte trotzdem funktionieren:
%Vor% Die Regex gibt an, dass irgendwo in der Zeichenfolge ein alphabetisches Großbuchstabe (?=.*[A-Z])
ist, und behauptet, dass irgendwo in der Zeichenfolge eine Zahl (?=.*[0-9])
vorhanden ist, und prüft dann, ob alles alphabetisches Zeichen oder Ziffer ist / p>
Ein Buchstabe kann entweder vor oder hinter der Ziffer stehen, daher sollte dieser Ausdruck funktionieren:
%Vor%Hier ist ein Codebeispiel, das diesen Ausdruck verwendet:
%Vor%Dies sollte Ihr Problem lösen:
%Vor%Aber es ist nicht lesbar. Ich würde vorschlagen, zuerst die Eingabe mit "^ [A-Z0-9] + $" zu überprüfen, dann mit "[AZ]" zu überprüfen, ob es mindestens einen Buchstaben enthält, und dann mit "[0-9]" überprüfen enthält mindestens eine Ziffer. Auf diese Weise können Sie leicht neue Einschränkungen hinzufügen und der Code bleibt lesbar.
Grundlagen:
Übereinstimmung in der aktuellen Zeichenfolge: .
Entsprechen Sie 0 oder eine beliebige Anzahl von Zeichen: *
Entsprechendes in der aktuellen Zeile: .*
Entspricht einem beliebigen Zeichen im Zeichensatz (Bereich): [start-end]
Ordne einen Regex aus einer Gruppe zu: (regex1|regex2|regex3)
Beachten Sie, dass der Anfang und das Ende aus der ASCII-Reihenfolge kommen und der Start vor dem Ende sein muss. Zum Beispiel können Sie [0-Z]
, aber nicht [Z-0]
ausführen. Hier ist das ASCII-Diagramm für Ihre Referenz
Überprüfen Sie die Zeichenfolge gegen Regex
Rufen Sie einfach yourString.matches(theRegexAsString)
Überprüfen Sie, ob die Zeichenfolge Buchstaben enthält:
Überprüfen Sie, ob ein Buchstabe vorhanden ist: yourString.matches(".*[a-zA-Z].*")
Überprüfen Sie, ob ein kleinerer verkleinerter Buchstabe vorhanden ist: yourString.matches(".*[a-z].*")
Prüfen Sie, ob ein Großbuchstaben vorhanden ist: yourString.matches(".*[A-Z].*")
Überprüfen Sie, ob die Zeichenfolge Zahlen enthält:
yourString.matches(".*[0-9].*")
Überprüfen Sie, ob die Zeichenfolge sowohl Zahl als auch Buchstaben enthält:
Am einfachsten ist es, zweimal mit Buchstaben und Zahlen zu vergleichen
yourString.matches(".*[a-zA-Z].*") && yourString.matches(".*[0-9].*")
Wenn Sie es vorziehen, alles zusammen zu finden, wird die Regex etwa so aussehen: Passen Sie einen String an, der irgendwo einen Charakter hat, und danach gibt es eine Zahl in einer beliebigen Position oder andersherum. Deine Regex wird also sein:
yourString.matches(".*([a-zA-Z].*[0-9]|[0-9].*[a-zA-Z]).*")
Überprüfen Sie, ob die Zeichenfolge mit dem Buchstaben
beginnt yourString.matches("[a-zA-Z].*")
Überprüfen Sie, ob die Zeichenfolge mit der Nummer endet
yourString.matches(".*[0-9]")