2010-08-17 9 views
5

Quiero tener la expresión regular que asegure que el comienzo de la cadena contenga 'http: //' y '/' y el final.preg_match: asegúrese de que el inicio y el final contengan algo

Ésta es una versión más larga que se me ocurrió,

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 /."/>'; 
} 

pero pensé que estas dos expresiones se pueden poner juntos como abajo, pero no lo puedo trabajar,

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."/>'; 
} 

las múltiples expresiones que yo tratar de combinar debe estar mal! ¿alguna idea?

gracias, Lau

+0

¿Puede dar una muestra de cuerdas? – Codex73

Respuesta

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

Las fuerzas ^http:\/\/http:// en la parte delantera, la \/$ fuerza una barra al final, y .* permite a todo (y posiblemente nada) entre.

Por ejemplo:

<?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"; 
    } 
} 
?> 

genera el siguiente resultado:

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

explosión, me ganaste con eso. Estaba escribiendo cuando decía una nueva respuesta. :) –

+0

muchas gracias, gbacon! ¡leyenda! :-)) – laukok

+0

@lauthiamkok ¡De nada! Me alegro de que ayude. –

Cuestiones relacionadas