2010-09-09 6 views
0

Im essayant de créer une fonction pour vérifier une sous-chaîne dans une chaîne dans php.PHP: recherche sous-chaîne dans une chaîne en utilisant preg_match?

public static function stringCheck ($string, $substring) { 
    $patern = "/".$substring."/"; 

    if (preg_match($substring, string) { 
    return true; 
    } 
    else return false; 
} 

mais si j'entrer un caractère spécial utilisé dans preg_match (^ [$() |. * + {?) Il plisse la recherche.

J'ai essayé quelque chose comme le code ci-dessous, mais que le travail na pas

$speicalChar = '/(\^|\.|\[|\$|\(|\)|\*|\+|\?|\{|\\)/'; 

Quelqu'un a une solution ou peut-être une alternative à preg_match. Gardez à l'esprit que je veux être en mesure de vérifier les symboles aussi. J'ai essayé d'utiliser strstr mais j'ai eu des problèmes avec les symboles.

Merci =]

+0

1) Ce n'est pas $ patern, son motif $. 2) Vous avez oublié un $, ce n'est pas "if (preg_match ($ substring, string)" c'est "if (preg_match ($ pattern, $ string)" & vous n'avez pas besoin de l'autre, il peut être: (preg_match ($ motif, $ chaine) {return true;} return false; "parce que si la condition if est vraie, le retour sera true fin cela stoppera la fonction, sinon il retournera false et stoppera la fonction – ahmet2106

+0

Ou 'return (bool) preg_match ($ pattern, $ string);' – BoltClock

+0

ya ce n'est pas mon code actuel, je viens d'écrire un exemple rapide donc mon mauvais sur les erreurs de syntaxe merci, je voulais surtout savoir comment vérifier pour les caractères spéciaux – nubme

Répondre

4
$pattern = '/' . preg_quote($substring, '/') . '/'; 

Ce échappe des caractères spéciaux pour vous. Transmettez également '/' pour qu'il s'échappe également puisque vous l'utilisez comme délimiteur.

Une autre chose, des correctifs pour quelques fautes de frappe dans votre si la condition:

if (preg_match($pattern, $string)) { 
+0

wow merci alot boltclock! preg_quote est exactement ce que je cherche =] – nubme

4

Y at-il des raisons pour lesquelles vous souhaitez utiliser preg_match? Est-ce que ça doit être une expression régulière? Qu'en est-il de strpos()?

Renvoie la position numérique de la première occurrence d'aiguille dans la chaîne haystack.

public static function stringCheck ($string, $substring) { 
    return (strpos($string, $substring) !== false); 
} 

Si vous ne disposez pas d'une raison d'utiliser des expressions régulières, ne les utilisez pas.

Mise à jour:

En ce qui concerne le commentaire sur public static: Ne pas créer des classes pour recueillir fonctions (il semble que vous faites cela ici). Ça n'a pas de sens. Créez simplement des fonctions normales et incluez-les dans vos scripts. Utilisez des classes pour une véritable POO.
Btw. vous devriez considérer un nom plus expressif pour votre fonction. stringCheck est assez vague (que vérifie-t-elle?).

+0

@stereofrog: Eh bien, je viens de copier la signature de la méthode OPs. Ne me blâmez pas;)) D –

+0

@stereofrog: comment obtenez-vous un si beau flotteur arrondi? – BoltClock