2009-11-21 22 views
6

Si necesito una cadena que coincida con este patrón: "word1, word2, word3", ¿cómo verificaría la cadena para asegurarme de que encaja en PHP?Compruebe si una cadena coincide con un patrón

quiero para asegurarse de que la cadena se ajusta a cualquiera de estos patrones:

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

Respuesta

9

Uso regular expressions:

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

Esto coincide:

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

Pero no:

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

¿Cómo podría hacer que funcione con cualquier cantidad de palabras? – Andrew

+2

Cambia el '{2}' a un '*' –

+0

Oh, está bien. Gracias. :) – Andrew

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

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

+0

¿php admite literales de expresiones regulares? la última vez que tuve que usar cadenas ... – knoopx

+1

No creo que esto sea lo que quiso decir. –

+0

Perdón por eso. El efecto secundario de usar múltiples langas. Ruby tomará el literal. (o interprete el '' como delimeters.) – CodeJoust

1

si estrictamente desea hacer coincidir una o más palabras enteras y no frases separadas por comas Proveedores:

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

cuando necesito para asegurarse de que toda mi cadena coincide con un patrón, hago esto:

ex, Quiero una fecha Ymd (no 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 
Cuestiones relacionadas