java - So testen Sie, ob ein String Buchstaben und Zahlen enthält

9

Ich brauche eine Regex, die beide Bedingungen erfüllt.

Es sollte nur dann wahr sein, wenn ein String sowohl A-Z als auch 0-9 enthält.

Folgendes habe ich versucht:

if PNo[0].matches("^[A-Z0-9]+$")

Es funktioniert nicht.

    
Lucky 18.07.2012, 02:23
quelle

6 Antworten

17

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>     

nhahtdh 18.07.2012, 02:33
quelle
11

Es ist einfacher zu schreiben und zu lesen, wenn Sie zwei separate reguläre Ausdrücke verwenden:

%Vor%

Besser noch, schreibe eine Methode:

%Vor%     
jahroy 18.07.2012 02:37
quelle
6

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%     
dasblinkenlight 18.07.2012 02:27
quelle
3

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.

    
vbezhenar 18.07.2012 02:28
quelle
1

Was ist mit ([A-Z].*[0-9]+)|([0-9].*[A-Z]+) ?

    
Chip 18.07.2012 02:28
quelle
1

Hier ist die Regex für dich

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)

auf

Ü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]).*")

Zusätzliche Regex für Ihre Referenz:

Ü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]")

    
Fangming Ning 27.11.2017 20:37
quelle

Tags und Links