HTML Java Server Page Regular Expression

Synth

Cadet 2nd Year
Registriert
Jan. 2008
Beiträge
31
Hallo CB-Community,

ich habe eine kleines Problem mit Regular Expressions. Ich möchte für ein Formular, welches ich in HTML programmiert habe, ein Geburtsdatum auf Richtigkeit im Format DD.MM.YYYY prüfen und bei falsch Eingabe abfangen. Nun habe ich mit Mühe und Not andere Eingaben wie Namen und Vornamen durch regexp geprüft, nur beim Geburtsdatum will es mir nicht gelingen. Hat jmd. einen Tipp? Wäre Großartig.

Meine bisherige Idee: ("[0-9]{1,2}.[0-9]{2,2}.[0-9]{4}") klappt natürlich nicht ;-)
 
Da du das Date Pattern ja schon hast - bzw. vorgegeben hast, könntest du es auch durch Date parsen lassen, Exceptions abfangen und somit auf Korrektheit hin prüfen lassne.


Ich nutze kein JSP - sondern JSF.

Nutzt du zur Eingabe ein <h:inputText/> ? Man könnte auch einfach einen Validator dranhängen: <f:convertDateTime type="date"
 
Zuletzt bearbeitet:
Die parse Methode in Date ist allerdings deprecated. Korrekt wäre ungefähr folgendes:

Code:
DateFormat formatter = new SimpleDateFormat( "dd.MM.yyyy" ); 
formatter.parse( "17022011" );

Gruß
 
Zur Eingabe nutze ich:

Code:
<input name=birthdate type=text value=dd.mm.yyyy>

und ich muss gestehen, dass ich was in Sachen Webprogrammierung noch ganz ganz am Anfang stehe und unter anderem dieses Formular für ein Schulprojekt schreibe.
 
Bei regulären Ausdrücken bedeutet . ein beliebiges Zeichen. Wenn du aber kein beliebiges Zeichen möchtest, sondern den Punkt, dann musst du das escapen mit \\

Sollen die Tage auch einstellig sein dürfen? Weil du DD hast...sollte der erste dann nicht 01 sein, damit du es als korrekt akzpetiert? Ich frage nur, weil du bei den Monaten eine zweistelligkeit erzwingst.

Ansonsten wäre es praktisch gewesen, wenn du geschrieben hättest WAS genau nicht geht. Also ein paar Beispiele, was nicht korrekt erkannt oder eben nicht erkannt wird.
 
Hallo Banthor,

ich stelle mir das ganze so vor, der Nutzer soll jegliche Daten eintragen durfen á la:

-> 01.01.1999
-> 11.11.2001
-> 1.1.1999
-> 1.11.2011

PS: danke für den Tipp mit \\ hab ich verinnerlicht und schon einmal eingefügt.
 
Hallo zusammen,

mittlerweile bin ich scheinbar selbst auf die Lösung gekommen. Problem ist gelöst und sieht folgendermaßen aus:

Code:
birth.matches("(0?[1-9]|[12][0-9]|3[0-1])\\.(0?[1-9]|1[012])\\.(19|20)[0-9][0-9]"))
 
Synth schrieb:
Hallo zusammen,

mittlerweile bin ich scheinbar selbst auf die Lösung gekommen. Problem ist gelöst und sieht folgendermaßen aus:

Code:
birth.matches("(0?[1-9]|[12][0-9]|3[0-1])\\.(0?[1-9]|1[012])\\.(19|20)[0-9][0-9]"))

Gerne.

Sieht für mich auch soweit korrekt aus. Dass du nur Die Jahre 1900-2099 erlaubst ist, so nehme ich an, gewollt. Dennoch würde ich das nicht so stark einschränken, auch wenn du das Problem vermutlich am 1.1.2100 nicht mehr erleben wirst :)

Statt [0-9] könntest du auch \d schreiben, das entspricht dann einer Ziffer.
 
Zurück
Oben