2010-02-22 24 views
5

Wie würde ich prüfen, ob ein String-Eingang in Java das Format hat:Besonderen Java regulärer Ausdruck

xxxx-xxxx-xxxx-xxxx

wobei x eine Ziffer 0..9 ist?

Danke!

+2

löschte meine Antwort - ich las "JavaScript" in meinem Kopf: P –

Antwort

3

String-Objekte in Java haben eine matches Methode, die gegen einen regulären Ausdruck überprüfen:

myString.matches("^\\d{4}(-\\d{4}){3}$") 

Diese besonderen Ausdruck prüft, ob vier Ziffern, und dann dreimal (ein Bindestrich und vier Ziffern), so repräsentiert Ihre erforderliches Format.

+0

Hinweis: Ich habe es nur noch einmal bearbeitet, weil ich die Anker weggelassen. Verwenden Sie die verankerte Version, nicht die ohne. – Joey

+0

Warum konnte nicht reduziert werden auf: myString.matches ("(- \\ d {4}) {4}"); –

+0

@Amir: Weil Ihre Zeichenfolge dann mit einem Bindestrich beginnen müsste. – Joey

4

Um zu beginnen, ist dies eine große Quelle von Regexps: http://www.regular-expressions.info. Besucht es, stochert und spielt herum. Weiter hat die java.util.Pattern API eine präzise overview von Regex-Mustern.

Nun zurück zu Ihrer Frage: Sie wollen vier aufeinanderfolgende Gruppen von vier Ziffern, die durch einen Bindestrich getrennt sind, abgleichen. Eine einzelne Gruppe von 4 Stellen in regex als

\d{4} 

Vier davon durch einen Bindestrich kann getrennt dargestellt werden wird wie folgt dargestellt:

\d{4}-\d{4}-\d{4}-\d{4} 

Um es kürzer machen Sie auch eine einzelne Gruppe darstellen können vier Ziffern und drei aufeinander folgende Gruppen von vier Ziffern mit einem Bindestrich vorangestellt:

\d{4}(-\d{4}){3} 

nun in Java Sie String#matches() zu testen, ob ein String mit dem angegebenen verwenden können Regex.

boolean matches = value.matches("\\d{4}(-\\d{4}){3}"); 

Bitte beachte, dass ich die Schrägstriche \\ von einem anderen Backslash geschützt, weil die Schrägstriche eine besondere Bedeutung in String haben. Um den tatsächlichen Backslash darzustellen, müssten Sie \\ verwenden.

+0

Sie haben für die String-Klasse keine besondere Bedeutung. Sie haben eine besondere Bedeutung für den Compiler. – Joey

+1

Meine Güte, ich habe 3 Minuten Aufwand und es gibt bereits eine akzeptierte Antwort. – BalusC

+0

@Johannes: Danke für den Nitpick :) – BalusC