2010-08-09 4 views
0

J'ai fait une recherche mais je n'ai rien trouvé. Je cherche un motif qui cherchera dans une chaîne alphanumérique (avec la longueur exacte de 7) la lettre "P". C'est ce que j'ai trouvé jusqu'à maintenant, pourquoi ne travaille-t-il pas?Motif de recherche PHP correct d'un caractère dans une chaîne alpha-numérique de longueur fixe

$pattern = "/^[\wP]{7}$/"; 
+0

Pouvez-vous donner quelques coups positifs et négatifs? –

+0

Merci les gars, je suis finalement passé à strlen et strpos – andrei

Répondre

1

Eh bien, il ne fonctionne pas parce que [\wP]{7} (dans votre regex: /^[\wP]{7}$?/) signifie trouver 7 caractères qui sont soit un caractère de mot OU la lettre P. Il pourrait trouver tous les Ps et il correspondrait, ou tous les caractères de mot et il correspondrait. Mon solution rapide serait de vérifier la chaîne est de 7 longues lettres à l'aide d'une expression régulière puis faire une position de chaîne pour trouver la "P":

if(preg_match("/^[\w]{7}$/", $target) && strpos($target, "P") != -1) { 
    // Do stuff 
} 
0

Essayez ceci:

$ pattern = '/^([a-zA-Z0-9] {6}) (P {1}) $ /';

Vous pourriez utiliser strpos et strlen pour la vitesse!

+0

Ce modèle ne correspondra qu'à un P à la fin. –

+0

Je l'ai changé donc ça devrait fonctionner correctement maintenant – PimPee

0

\w contient a-z, A-Z, 0-9 et _ il est donc pas ce que vous voulez du tout.

Je vais essayer avec:

if (preg_match("/^[a-z0-9]*P[a-z0-9]*$/i", $target) && (strlen($target) == 7)) { ... } 
0

Cela devrait correspondre à une chaîne qui est de 7 caractères et contient un P majuscule:

(?=^\w{7}$)\w*P\w* 
Questions connexes