2009-11-21 3 views
6

Si j'ai besoin d'une chaîne pour correspondre à ce modèle: "word1, word2, word3", comment est-ce que je vérifierais la chaîne pour m'assurer qu'elle correspond à cela, en PHP?Vérifie si une chaîne correspond à un modèle

Je veux vous assurer que la chaîne correspond à l'une de ces motifs:

word 
word1,word2 
word1,word2,word3, 
word1,word2,word3,word4,etc. 

Répondre

9

Utilisation regular expressions:

preg_match("[^,]+(,[^,]+){2}", $input) 

Cela correspond à:

stack,over,flow 
I'm,not,sure 

Mais pas:

, 
asdf 
two,words 
four,or,more,words 
empty,word, 
+0

Comment pourriez-vous le faire fonctionner avec un nombre quelconque de mots? – Andrew

+2

Remplace le '{2}' par un '*' –

+0

Oh, d'accord. Merci. :) – Andrew

2
preg_match('/word[0-9]/', $string); 

http://php.net/manual/en/function.preg-match.php

+0

php prend-il en charge les littéraux regex? La dernière fois que j'ai dû utiliser des cordes ... – knoopx

+1

Je ne pense pas que ce soit ce qu'il voulait dire. –

+0

Désolé à ce sujet. L'effet secondaire de l'utilisation de plusieurs langages. Ruby prendra le littéral. (ou interpréter les '' comme des délimiteurs.) – CodeJoust

1

si vous voulez strictement correspondre à un ou plusieurs mots entiers et non des phrases séparées par des virgules essayer:

preg_match("^(?:\w+,)*\w+$", $input) 
0

Lorsque je dois vous assurer que toute ma chaîne correspond à un modèle, je fais ceci:

ex, je veux une date Ymd (non Ymd H: i: s)

$date1="2015-10-12"; 
$date2="2015-10 12 12:00:00"; 

function completelyMatchesPattern($str, $pattern){ 
    return preg_match($pattern, $str, $matches) === 1 && $matches[0] === $str; 
} 

$pattern="/[1-9][0-9]{3}-(0[1-9]|1[0-2])-([012][1-9]|3[01])/"; 

completelyMatchesPattern($date1, $pattern); //true 
completelyMatchesPattern($date2, $pattern); //false 
Questions connexes