2010-05-04 16 views
9

Me preguntaba cómo podría verificar una cadena rota en una matriz contra una preg_match para ver si comenzó con www. Ya tengo uno que verifica http://www.Detectando una url usando preg_match? sin http: // en la cadena

function isValidURL($url) 
{ 
return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url); 
} 

$stringToArray = explode(" ",$_POST['text']); 

    foreach($stringToArray as $key=>$val){ 
    $urlvalid = isValidURL($val); 
    if($urlvalid){ 
    $_SESSION["messages"][] = "NO URLS ALLOWED!"; 
    header("Location: http://www.domain.com/post/id/".$_POST['postID']); 
    exit(); 
    } 
    } 

¡Gracias! Stefan

+2

¿Puedes mostrar algún código que hayas probado basado en el que funciona? Más personas aquí te ayudarán a resolver un problema en el que estás trabajando y que te dará la respuesta. Solo obtener un requerimiento y producir una respuesta es lo que me pagan para hacer. –

+0

agregado en el código de trabajo hasta el momento –

Respuesta

11

¿Quieres algo como:

%^((https?://)|(www\.))([a-z0-9-].?)+(:[0-9]+)?(/.*)?$%i 

esto es usar el | para que coincida con http:// o www al principio. Cambié el delimitador a % para evitar chocar con el |

+0

Solo una nota: las URL como http://wwwtumblr.com también pasarán esta expresión regular. – joshholat

+4

esto no es cierto ... el segundo grupo es '(www \.)' Que requiere un '.' después de' www.'. Además, probé la expresión regular contra 'wwwtumblr.com' aquí: http://www.solmetra.com/scripts/regex/index.php y no pasó. sin embargo, esto * * coincidirá con algo como www.tumblrcom. el error más grande es probablemente el '.' sin esculpir en el tercer grupo. estos días usualmente hago '([a-z0-9 -] \.) + ([a-z0-9 -])' para unir los subdominios y el tld. –

-2

Probar implode($myarray, '').strstr("www.")==0. Eso implosiona tu matriz en una cadena, luego verifica si www. está al comienzo de la cadena (índice 0).

+0

Exploto la cadena al principio ya que la url puede estar a la mitad de ella, p. Ej. hola cómo estás www.google.com –

+0

http://daringfireball.net/2009/11/liberal_regex_for_matching_urls – user956584

0

que explotan la cadena en un principio como la url podría ser a mitad de camino a través de él, por ejemplo, hello how are you www.google.com

Explota la cadena y utiliza una instrucción foreach.

Ej:

$string = "hello how are you www.google.com"; 
$string = explode(" ", $string); 
foreach ($string as $word){ 
    if ((strpos($word, "http://") === 0) || (strpos($word, "www.") === 0)){ 
    // Code you want to excute if string is a link 
    } 
} 

Nota usted tiene que utilizar el operador === porque strpos puede regresar, devolverá un 0 que parece ser false.

+0

¿Cómo extraerías el enlace solamente? – Sobiaholic

Cuestiones relacionadas