Durch googlen bin ich auf diesen Ausdruck für die Prüfung von Straßennamen(inkl. Hausnummern) gestoßen:
Zitat:
'^([a-zäöüß\-\.]+\s+)+[0-9]+[a-zäöüß]*((\/|-)[0-9])*$'
|
Tests haben gezeigt, dass er folgende Strings passieren lässt:
Musterweg 1
Musterweg 1b
Musterweg 1-5
Musterweg 1a-5b
Musterweg 1/3
Musterweg 1 bis 3
Ebenso schluckt er ein ß, zB. in Straße, sowie Vorsätze wie zB. Am, Zur, Zum Auf der, etc.!
Ich bitte an dieser Stelle um Korrektur, falls meine Interpretation des Ausrucks falsch ist; welche ich mit mit Hilfe von
wikipedia erarbeitet hab.
'eröffnet den Ausdruck
^ signalisiert den Zeilenanfang
( war nicht expliziert erklärt, aber eröffnet wohl eine Zeichengruppe
[a-zäöüß\-\.] alle Konsonanten und Umlaute(groß oder klein), ß;
\-\. gestattet - und .
+ Der voranstehende Ausdruck muss mindestens 1x vorkommen, darf aber auch mehrfach vorkommen
\s steht für ein Leerzeichen(Whitespace)
+ Der voranstehende Ausdruck muss mindestens 1x vorkommen, darf aber auch mehrfach vorkommen
) war nicht expliziert erklärt, aber schließt wohl eine Zeichengruppe
+ Der voranstehende Ausdruck muss mindestens 1x vorkommen, darf aber auch mehrfach vorkommen
[0-9] alle Zahlen von 0-9
+ Der voranstehende Ausdruck muss mindestens 1x vorkommen, darf aber auch mehrfach vorkommen
[a-zäöüß] alle Konsonanten und Umlaute(groß oder klein)
* Der voranstehende Ausdruck darf beliebig oft (auch keinmal) vorkommen
( war nicht expliziert erklärt, aber eröffnet wohl eine Zeichengruppe
( war nicht expliziert erklärt, aber eröffnet wohl eine Zeichengruppe
\/|- gestattet /, | und -
) war nicht expliziert erklärt, aber schließt wohl eine Zeichengruppe
[0-9] alle Zahlen von 0-9
) war nicht expliziert erklärt, aber schließt wohl eine Zeichengruppe
* Der voranstehende Ausdruck darf beliebig oft (auch keinmal) vorkommen
$ kennezeichnet den/das Zeilen-/Stringende
' beendet den Ausdruck
Nun ist mit dem vorhandenen regulären Ausdruck auch leider so eine Eingabe zulässig:
am musterweg 0b
Dies ist natürlich nicht gerade schön von der Optik, aber auch für eine Speicherung in eine DB (wo Kontaktdaten korrekt erfasst sein sollten) ist dies nicht zweckdienlich.
Gut die klein geschriebene Straße wird die Post wohl nicht in Schwierigkeiten bringen, aber von einer Haus Nr. 0 habe ich noch nie was gehört.
Mit meinem Kenntnissstand in Sachen regulären Ausdrücken, der vorher gleich 0 war, hab ich nun versucht die Vorgabe entsprechend anzupassen.
Hier die neue Variante:
Zitat:
'^([A-ZÄÖÜ]{1}[a-zäöüß\-\.]+\s+){1}([a-zäöüß\-\.]+\s+)+([A-ZÄÖÜ]{1}[a-zäöüß\-\.]+\s+)+([A-ZÄÖÜ]{1}[a-zäöüß]+\s+)+[1-9]{1}[0-9]+(\s{1}[a-zß]\s{1}){1,1}((\/|-)[1-9]{1}[0-9])* '
|
Mein Vorstellung mit dem obigen Konstrukt war es auch folgende Eingaben:
Dr.-von-Kleist-Straße 1 (durchzulassen)
dr.-Von-kleist-straße 0 (zu blocken)
Aber die unkorrekte Schreibweise wird dennoch übernommen!
Ist das, was ich im Sinn habe schlichtweg nicht möglich oder liegts an einem falschen Code?
Zumindest Hausnummern mit führender 0 möchte ich schon eine Weiterverarbeitung verbieten.
Oder muss ich mich diesbzgl. einfach drauf verlassen, dass der User es halt korrekt eingibt?
Wer Ahnung hat möge bitte mal drüber schauen und ggf. verbessern. Thx!