Problem mit preg_match

Cemil

Erfahrenes Mitglied
Maraba Arkadaslar (Freunde),

ich versuche gerade ein Textfeld für die Wohnadresse zu überprüfen und zwar im folgenden Format:

Musterstrasse 777B

Das Leerzeichen hinter Musterstrasse ist sehr wichtig. Das hab ich auch. Danach sollte zuerst die Hausnummer kommen (mind. 1 max. 999 oder so) und dann bei Bedarf noch ein Buchstabe, z.B. 777A, B, C, etc.

Hab das so geschrieben:

PHP:
if(!preg_match("~([a-zA-Z]*)(\ )([0-9]{1,3})([a-zA-Z]{1})~isU",$address))

Die eingabe 444 122b wird akzeptiert, obwohl zuerst Buchstaben erfolgen sollten, danach nur Zahlen und ein Buchstabe hinter der Hausnummer nur bei Bedarf eingegeben werden sollte.

Wo habe ich einen Denkfehler gemacht?

Selamlar (Grüsse)
 
Zuletzt bearbeitet:
Hallo,

der reguläre Ausdruck als solches sieht nicht verkehrt aus - allerdings sind mir die "~" im preg_match ein Rätsel.

Normalerweise werden Anfang und Ende mit einem Slash "/" eingegrenzt. Weiterhin soll der letzte Buchstabe ja optional sein - also müßte der Pattern auch entsprechend auf einen nicht vorhandenen letzten Buchstaben hin TRUE zurückgeben.

Ich habe deinen Pattern mal etwas angepasst - er sollte nun eigentlich den Zweck erfüllen:
Code:
// \s => Whitespace
// ^ => Suchmuster soll am Anfang des Strings beginnen
// $ => Suchmuster soll am Ende des Strings aufhören
if(!preg_match("/^([a-zA-Z]*)(\s{1})([0-9]{1,3})([a-zA-Z]{0,1})$/siU",$address))

mfg Bloddy
 
Hallo bloddy,
vielen Dank für Deine Antwort. Klappt sehr gut. Danke.

Noch eine Frage:

Kann ja sein das irgendjemand die Adresse in diesem Format eingibt:

Musterstr. 40

Also, d.h. nach Strasse soll ein Leerzeichen oder . erfolgen. Wie mach ich das?

Grüsse
 
Hallo,

du fügst einfach noch die entsprechende Abfrage hinter das erste Suchmuster ein:
Code:
// \s => Whitespace
// ^ => Suchmuster soll am Anfang des Strings beginnen
// $ => Suchmuster soll am Ende des Strings aufhören
if(!preg_match("/^([a-zA-Z]*)([.]{0,1})(\s{1})([0-9]{1,3})([a-zA-Z]{0,1})$/siU",$address))

cu Bloddy
 
Hallo nochmals,

Ich hab's jetzt so:

PHP:
if(!preg_match("/^([a-zA-Z]*)(.\s{1,1})([0-9]{1,3})([a-zA-Z]{0,1})$/siU",$address))

Hab gesehen, dass das ganze nicht richtig ausgegeben wird, deshalb hab ich es noch einmal in den Code Tag eingebunden:

Code:
if(!preg_match("/^([a-zA-Z]*)(.\s{1,1})([0-9]{1,3})([a-zA-Z]{0,1})$/siU",$address))

Es funktioniert.

Ciao.

CEMO
 
Zuletzt bearbeitet:
Hallo nochmals,
wie schon oben beschrieben, überprüfe ich ob eine Adresse korrekt eingegeben wurde. In der Strasse ist ein Leerzeichen, oder ein - erlaubt, aber diese Zeichen dürfen nicht am Anfang von Strasse stehen. Wie kann ich diese ausschliessen?

PHP:
if(!preg_match("/^([a-zA-Z\s-]*)(.\s{1,1})([0-9]{1,3})([a-zA-Z]{0,1})$/siU",$address)) {

Code:
if(!preg_match("/^([a-zA-Z\s-]*)(.\s{1,1})([0-9]{1,3})([a-zA-Z]{0,1})$/siU",$address)) {

Grüsse

CEMKO
 
Zuletzt bearbeitet:
Hallo,
ich probiere gerade etwas aus im Zusammanhang mit dem obigen Code.

PHP:
$address = substr("-",0,0);
if ($address) {
	echo "<table><tr>";
	echo "<td><p>Bitte geben Sie eine gültige Adresse ein.<br>(1. Wahl: str. 29a, 2. Wahl: strasse 29a)</p></td>";
	echo "</tr></table>";

Mein Problem:

substr erkennt zwar, das der 1. Buchstabe ein - ist und gibt danach eine Fehlermeldung aus, aber wenn ich danach die richtige Adresse eingebe, erhalte ich wieder eine Fehlermeldung.

Was mache ich falsch?

Grüsse
 
hmm eigentlich versteh ich nicht ganz was du vorhast ;D

aber nungut
$search = "/([a-z]+(.|-|)([a-z]+)) ([0-9]+)([a-z]|)/iu";

erlaubt =
"hausmeisterstraße 14"
"hausmeister-straße 14"
"hausmeisterstr. 14"
"hausmeister 14"

"hausmeisterstraße 14A"
"hausmeister-straße 14A"
"hausmeisterstr. 14A"
"hausmeister 14A"


schreib einfach mal was alles erlaubt ist und was nicht da wird man ja ganz dusselig ;D
 
Zuletzt bearbeitet:
Hallo,
das alles hab ich schon. Funktioniert prächtig.

Gültig:

hausmeisterstrasse 13

Ungültig:

-hausmeisterstrasse 13 (wenn vor strasse ein - eingegeben wird, ist das ungültig.)

Das erste Zeichen muss [a-zA-Z] enthalten, bei all den anderen Zeichen Fehlermeldung.

Auf php.net hab ich etwas von substr gelesen. Ich versuchte es anzuwenden, aber ich habe es leider vermasselt. :(

Ich weiss nicht, wie man diese Zeichen ausschliessen kann.

Grüsse
 
Warum muss ich es immer so kompliziert machen, obwohl es so einfach ist.

Die Antwort lautet: (.|s|-{1,1}

Jetzt klappt's auch mit der Fehlermeldung.

Danke.

Tschüss
 
Zurück