2010-08-17 5 views
0

i utilisé le code ci-dessous pour chercher et trouver si http est inclut dans l'utilisateur d'adresse url $ entresimple question sur preg_match() en php

if (!preg_match("/http:///", $user_website) 

mais j'eu cette erreur

Warning: preg_match() [function.preg-match]: Unknown modifier '/' in 

je sais c'est parce que // de http mais comment fonctionne ce travail!?

+0

quoi avec le non-sens preg_match? il y a une fonction intégrée dans php juste pour cela: http://php.net/manual/fr/function.parse-url.php – shylent

+1

merci pour votre note, mais je me demandais comment contourner cette erreur –

Répondre

2

Au lieu d'avoir à échapper à tous les / dans l'URL Regexes il est souvent utile d'utiliser preg_* caractères alternatifs pour marquer le début/fin du motif.

if (!preg_match("#http://#", $user_website) 
1

Échapper / caractères avec \ caractères.

0

Vous devez échapper des caractères littéraux. Placez un back-slash avant vos barres obliques.

http:// devient http:\/\/

0
if (!preg_match("/http:\/\//", $user_website) 
2

Vous pouvez échapper aux barres obliques comme les autres réponses mentionnent, ou bien vous pouvez utiliser différents délimiteurs, les caractères de préférence, vous ne serez pas utiliser dans votre regex:

preg_match('~http://~', ...) 
preg_match('!http://!', ...) 

Et vous n'avez pas vraiment besoin regex pour cela. correspondant à cordes devrait être suffisant:

if (strpos($user_website, 'http://') !== false) { 
    // do something 
} 

Voir: strpos()

+1

+1 pour la mention strpos –

+0

aurait été un +1 s'il n'y avait pas déjà une fonction parse_url – shylent

+0

@shy Il ne semble pas que l'OP veut analyser l'URL – NullUserException

2

Le délimiteur que vous utilisez / se trouve dans le modèle aussi bien. Dans ce cas, vous pouvez échapper au delimiter dans le motif:

if (!preg_match("/http:\/\//", $user_website) 

ou vous pouvez choisir un delimiter différent. Cela permet de garder le modèle propre et court:

if (!preg_match("#http://#", $user_website) 
2

Vous devez sûrement faire

$parts = parse_url($my_url); 

$parts['scheme'] contiendra alors le schéma d'URL (peut-être 'http').

+0

+1 pour mentionner le bon outil pour le travail. N'utilisez pas une regex pour analyser une URL quand il y a déjà une bonne intégration! En outre, en raison d'un '^' manquant, l'expression rationnelle de l'OP correspondrait à 'https: // exemple.com/a/b/c/http: // x/y/z' qui est une URL valide-assez (j'ai récemment rencontré un site qui a servi le contenu d'une URL comme ci-dessus) –