2010-08-17 4 views
5

Ich möchte den regulären Ausdruck haben, der dafür sorgt, dass der Anfang der Zeichenfolge 'http: //' und '/' und das Ende enthält.preg_match: Stellen Sie sicher, dass der Anfang und das Ende etwas enthält

Dies ist eine längere Version kam ich mit,

if(!preg_match("/(^http:\/\//", $site_http)) 
{ 
$error = true; 
echo '<error elementid="site_http" message="site_http - Your link appears to be invalid. Please confirm that your link contains http:// at the start."/>'; 
} 
elseif (!preg_match("/\/$/", $site_http)) 
{ 
$error = true; 
echo '<error elementid="site_http" message="site_http - Your link appears to be invalid. Please confirm that your link has ended with a /."/>'; 
} 

aber ich dachte, diese beiden Ausdrücke wie unten zusammenstellen können, aber es wird nicht funktionieren,

if(!preg_match("/(^http:\/\/)&(\/$)/", $site_http)) 
{ 
$error = true; 
echo '<error elementid="site_http" message="site_http - Your link appears to be invalid. Please confirm that your link contains http:// at the start and a/at the end."/>'; 
} 

die mehrere Ausdrücke, die ich Versuch zu kombinieren muss falsch sein! irgendeine Idee?

Dank, Lau

+0

Können Sie eine Zeichenfolge Probe zur Verfügung stellen? – Codex73

Antwort

9
if(preg_match('/^http:\/\/.*\/$/', $site_http)) 
{ 
    ... 
} 

Die ^http:\/\/ Kräfte http:// an der Front, zwingt die \/$ einen Schrägstrich am Ende, und .* erlaubt alles (und möglicherweise nichts) zwischen.

Zum Beispiel:

<?php 

foreach (array("http://site.com.invalid/", "http://") as $site_http) { 
    echo "$site_http - "; 
    if (preg_match('/^http:\/\/.*\/$/', $site_http)) { 
    echo "match\n"; 
    } 
    else { 
    echo "no match\n"; 
    } 
} 
?> 

erzeugt die folgende Ausgabe:

http://site.com.invalid/ - match 
http:// - no match
+0

Explosion, du hast mich dazu geschlagen. Hat getippt, als es eine neue Antwort gesagt hat. :) –

+0

vielen dank, gbacon! Legende! :-)) – laukok

+0

@lauuthiamkok Gern geschehen! Ich bin froh, dass es hilft. –

Verwandte Themen