2012-04-12 17 views
0
preg_match('/^(http:\\/\/)?(.+)\.MYDOMAIN\.com(.*)/', $url, $match) 

Dies ist mein regex für die Validierung von einer URL zu validieren, die eine Sub-Domain haben muss, aber wenn jemand www statt Sub-Domain verwendet es wird auch überprüft. Zum Beispiel:regulärer Ausdruck url mit Sub-Domain

  • http://shoes.en.MYDOMAIN.com/ muss diesen Pass

  • http://www.MYDOMAIN.com/ Diese

Wie kann ich meine Regex bearbeiten versagen, wenn die Sub-Domain www ist nicht müssen?

+0

Verwenden Backticks URLs zu formatieren: 'http: // www.MYDOMAIN.com /' . Das wird SO davon abhalten, sie zu verknüpfen, und das "http: //" in Kommentaren fallen lassen. –

Antwort

0

versuchen dieses: eine litle getestet, scheint

preg_match('/^(http:\\/\/)?([^(www)]+)\.MYDOMAIN\.com(.*)/', $url, $match); 
+0

Tut nicht, was Sie erwarten. Das "www" wird tatsächlich als Zeichenklasse behandelt, entspricht also "w" und passt auf jede Subdomain, die kein "w" enthält. –

+0

Sie auch einen austretenden Schrägstrich im Protokoll fehlt –

+0

Dies wird fehlgeschlagen, wenn meine Subdomain mit www beginnt. Wie wwwshoes –

2

zu funktionieren Ich denke, man es mit einer negativen vorwärtsgerichtete Behauptung tun können: (?!www\.), die nach dem Protokoll Kontrolle gebracht werden, überprüft, ob es gibt kein www. nach dem Start oder Protokoll.

/^(http:\\\/\/)?(?!www\.)(.+)\.MYDOMAIN\.com(.*)/.test("www.MYDOMAIN.com") 
+0

funktioniert viel besser als meine Lösung – k102

+0

Dies wird fehlgeschlagen, wenn ich http verwende. Die Regex ist vorbei http://www.sd.MYDOMAIN.com Es ausgefallen sein muss, wie es www hat –

+0

http://www.shoes.trustpass.MYDOMAIN.com/ warum diese immer weiter ??? Es funktioniert gut, wenn ich http: // entferne. Nach dem Senden stackoverflow entfernt http und www aus der URL. Bitte fügen Sie http und www beim Start der angegebenen URL hinzu –

0

Wie wäre es zuerst die Domain mit Ihrem aktuellen Lösung dann für www unter Verwendung eines zweiten Ausdruck überprüfen bestätigen:

(\.www\.|http:\/\/www\.|^www\.)