2016-06-20 22 views
2

Ich versuche preg_match zu verwenden, um herauszufinden, ob eine URL ein bestimmtes Muster hat und im Moment funktioniert es nicht so, wie ich es erwartet habe. Heres, was ich habe, so weit:PHP - preg_match regex

if(! preg_match('^lease/([0-9]+)/?', $url)) { 
    wp_redirect(home_url(), 301); 
} 

Grundsätzlich mag ich sehen, ob die URL-Muster wie unten (gefolgt von einer Zahl Mietvertrag Schlüsselwort) ist und wenn die Seite nicht zur Startseite umgeleitet werden soll. Ich bin nicht gut mit Regex, also brauche ich etwas Hilfe mit diesem. TIA. www.example.com/lease/324

+2

Nutzung erlaubt 'if (! preg_match ('~ ^. */lease/([0-9] +) /? $ ~', $ url) ' –

Antwort

1

Sie müssen erlauben Sie alle Zeichen vor der /lease mit .*?, ein Ende der Zeichenfolge Anker $ und Regex Trennzeichen (ich bevorzuge ~, so dass Vorwärts Schrägstriche nicht entkommen):

if(! preg_match('~^.*/lease/([0-9]+)/?$~', $url) 

Oder Sie können ^.*? Teil weglassen, da preg_match teilweise Übereinstimmungen

if(! preg_match('~/lease/([0-9]+)/?$~', $url) 
-1

Sie benötigen die Erfassungsgruppe (Klammer) nicht, außer Sie möchten wissen, was die abschließenden Zahlen sind. Aber sieht aus wie Sie nur überprüfen wollen, ob es lease/{number}

enthält Sie können dies versuchen:

if (! preg_match("/lease\/[0-9]+/", $url)) { 
    wp_redirect(home_url(), 301); 
} 

enthält leasen, dann einen Schrägstrich, dann 1+ Anzahl

+0

Gewöhnlich ist das Spezifizieren von Typen gut, aber ich würde sagen, benutze' false == nicht = preg_match() '. "[' preg_match() '] (http://php.net/manual/en/function.preg-match.php) gibt '1' zurück, wenn das Muster dem gegebenen Subjekt entspricht, '0' wenn nicht, oder ' FALSE, wenn ein Fehler aufgetreten ist. " – Sam

+0

Auch '[0-9]' könnte '\ d' sein. – alex