2009-11-21 21 views
6

Se ho bisogno di una stringa per abbinare questo modello: "parola1, parola2, parola3", come dovrei controllare la stringa per assicurarmi che si adatti, in PHP?Verifica se una stringa corrisponde a un modello

voglio per assicurarsi che la stringa si adatta a qualsiasi di questi modelli:

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

risposta

9

Uso regular expressions:

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

Questo corrisponde:

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

Ma non:

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

Come si può farlo funzionare con un numero qualsiasi di parole? – Andrew

+2

Cambia '{2}' in a '*' –

+0

Oh, va bene. Grazie. :) – Andrew

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

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

+0

supporta php regex letterali? l'ultima volta che ho dovuto usare le stringhe ... – knoopx

+1

Non penso che questo sia quello che intendeva. –

+0

Mi dispiace per quello. L'effetto collaterale dell'uso di più langages. Ruby prenderà il letterale. (o interpretare "come delimitatori") – CodeJoust

1

se strettamente desidera far corrispondere una o più parole intere e non frasi separate da virgole provare:

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

quando ho bisogno di fare in modo che tutta la mia stringa corrisponde a un modello, faccio questo:

ex, io voglio una data 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 
Problemi correlati