Reguläre Ausdrücke UTF8

I

IchInMeinemBüro

Hallo,
ich habe im Rahmen eines Admin Tools an regulären Ausdrücken gearbeitet und folgende Konstellationen gebastelt:

Vorname /[a-zA-Züöä]{3,5}([ ]{1,1})?([a-zA-Züöä]{3,5})?/
Es sollen bis zu 5 Vornamen (durch Leerzeichen getrennt) nur mit Buchstaben eingetragen werden können. Funktioniert nicht einwandfrei, da alle 5 Vornamen erzwungen werden.

Nachname /[a-zA-Züöä\-]{3,40}/
Es sollen Einfache- und Doppelnamen mit max 40 Buchstaben eingetragen werden können.

eMail /([\w]{1,30})\@[\w]{1,30}\.([\w]{2,10}/
Eintragung einer EMailAdresse welche geltenden Richtlinien entspricht.

Beschreibung /[]{10,200}/
Soll eine Beschreibung der ROlle mitgeben. Problem: Kann vollständig aus Leerzeichen bestehen.

Ich hoffe ich konnte Euch das bereits vorhandene gut genug darstellen. Zu meiner Frage:
Wie kann ich die erwähnten Probleme am besten Lösen? Und welche weiteren Probleme seht Ihr eventuell (ich meine Möglichkeiten die ich übersehen habe z.B. das doch Namen mit Zahlen möglich sind //Aus der Luft gegriffenes Bsp.).

Ich hoffe das hier Jemand Zeit, Lust und Wissen genug hat um mir zu helfen. Gruß und Danke voraus!
 
Moin,

schau Dir mal hier die verschiedenen Quantifizierer an:
http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html

Obwohl das Ganze wohl nicht so simpel ist, da Du ja gewisse Abhängigkeiten einbauen mußt....
Bspw.:
Vorname ( ([A-Z]{1}[a-z]{1,39}){1} [ ]{1} ) {1,5}
liefert dann am Ende immer ein Space ....

Noch schlimmer wird es dann beim Nachnamen, wenn dieser nur 40 Zeichen lang sein darf ... also bei Doppelnamen x Zeichen VOR dem Bindestrich und 40-x-1 Zeichen NACH dem Bindestrich ....
Wie das geht kann ich Dir so aus dem Stand nicht sagen !

Noch ein kleiner Tipp in diesem Zusammenhang!
Wir nutzen hier in der Firma zum Testen von regulären Ausdrücken das nette kleine
Tool "RegEx coach"! Es kann zusammen mit seiner Doku hier runtergeladen werden:
http://weitz.de/regex-coach ("Windows installer" oder "Linux tar archive")

Es eignet sich auch gut zur Einarbeitung in dieses Thema!

Gruß
Klaus
 
Hi!

Warum UTF-8? Und wenn schon UTF-8, warum dann die ganzen schrulligen Zeichen im Ausdruck? (POSIX) Character Classes sollten eigentlich auf der aktuellen Locale basieren. Ansonsten, oder wenn das nicht reicht, helfen Properties bzw. Categories.

Vorname /[a-zA-Züöä]{3,5}([ ]{1,1})?([a-zA-Züöä]{3,5})?/
Es sollen bis zu 5 Vornamen (durch Leerzeichen getrennt) nur mit Buchstaben eingetragen werden können. Funktioniert nicht einwandfrei, da alle 5 Vornamen erzwungen werden.
Also soll er die Vornamen von Hugo Egon Balder akzeptieren, aber Karl-Heinz Brodbeck abweisen? Der wär' ziemlich sauer... Mein Vorschlag wäre:
Code:
/(([\p{L}]+(-[\p{L}]+)*)\s*){1,5}/
Dann würde auch nur ein Vorname erzwungen werden und Bindestriche sind ok.

Nachname /[a-zA-Züöä\-]{3,40}/
Es sollen Einfache- und Doppelnamen mit max 40 Buchstaben eingetragen werden können.
Da man auch Zusätze wie von oder van der erlauben sollte, empfehle ich hier genau den gleichen Ausdruck wie oben. Das Überprüfen auf eine maximale Länge kann man vorher oder nachher im Programm erledigen.

eMail /([\w]{1,30})\@[\w]{1,30}\.([\w]{2,10}/
Eintragung einer EMailAdresse welche geltenden Richtlinien entspricht.
Welche Richtlinien? RFC 2822 lässt so einiges zu das von Dir nicht zugelassen wird - z.B. Bindestriche und Punkte auch vor dem @ oder beliebig viele Subdomains.

Den letzten Punkt, Beschreibung, würde ich gar nicht erst durch die Regex-Engine jagen. Ein simples trim() sollte hier genügen - sofern Du keine weiteren Einschränkungen vornimmst.

Gruß
Enum
 
Zurück