2016-04-09 9 views
0

Ich versuche, einen regulären Java-Ausdruck zu erhalten, um zu versuchen, eine Benutzereingabe mit der ScannerSystem.in Funktion zu validieren. Was ich zu validieren versuche, ist eine Benutzereingabe, die nur Buchstaben als Eingabe enthalten kann und mehr als ein Wort enthalten kann. Wenn ich zum Beispiel ("Test1") eintippe, wird es eine Nachricht ausgeben, die darauf hinweist, dass ich nur Buchstaben eingeben muss, und sie erneut eingeben muss, wenn ich jedoch ("Test 1") eingeben soll würde durch meine Regex passieren, scheint es, dass der Raum dieses Problem verursacht, aber ein Leerzeichen in meinem Regex hinzufügen hat mein Problem nicht gelöst. Jede Hilfe würde sehr geschätzt werden. Unten ist der Abschnitt meines Code, der die Probleme ist mit:Java Scanner hasNext() String Regex Validierung

System.out.println("Please enter the your name: "); 

while(!input.hasNext("[a-zA-Z]+")){ 

    System.out.println("Your name must consist of only letters"); 
    input.nextLine(); 

} 

String name = input.nextLine(); 

Dies jemand eindeutig falsch sein kann, aber ich bin neu in Java und regex und versucht haben, den ganzen Tag, um herauszufinden, was mit so schiefgelaufen Kein Erfolg.

Vielen Dank für Ihre Zeit.

+0

Versuchen Sie '^ [a-zA-Z_] * $' Es ist nicht perfekt, aber es ist einfach genug für einen Neuling zu verstehen. – TEK

+0

Vielleicht '^ [a-zA-Z_] + $' so sind leere Strings nicht erlaubt. – totoro

Antwort

1

Alles, was Sie tun müssen, ist ein Leerzeichen innerhalb der [] hinzufügen. Ich würde auch vorschlagen ^ mit (es zu erklären, muss der Anfang der Zeichenfolge sein) und $ (für das Ende des Strings):

^[a-zA-Z ]+$ 

Sie auch \s können alle Leerzeichen wählen, wie Tab

Ihre vollständige Code:

System.out.println("Please enter the your name: "); 

while(!input.hasNext("^[a-zA-Z ]+$")){ 
    System.out.println("Your name must consist of only letters"); 
    input.nextLine(); 
} 

String name = input.nextLine(); 

Wenn Sie Symbole wie * zulassen wollen, so alles bu t Zahlen. Sie könnten \d+ verwenden. Wenn es übereinstimmt, dann drucken Sie den Fehler (Sie müssen die ! in Ihrer while Anweisung entfernen)

+0

Ich würde vorschlagen, die gleiche Antwort, aber es würde nicht funktionieren .. Ich testete den gleichen Code mit 'John Doe' und es würde die Schleife, und ich kann nicht herausfinden, warum .. – Maljam

+0

Ich habe das gleiche Problem als Maljam, ich habe es den ganzen Tag versucht, es scheint nur nicht die Eingabe zu bestätigen, wenn ein Leerzeichen vorhanden ist. Funktioniert nur mit einer Zeichenfolge wie "Test1" und nicht mit "Test 1", auch mit dem zusätzlichen Platz in []. Danke für den Vorschlag, obwohl Druzion! – ChocolateDogBone

+0

@ChocolateDogBone Hast du es mit '\ s' versucht? – Druzion