2012-01-20 14 views
7
$check = 'this is a string 111'; 
if ($check = 'this is a string') { 
echo 'perfect match'; 
} else { 
echo 'it did not match up'; 
} 

pero vuelve perfecta cada partido en lugar de que no coincidía ... Me parece que no puede obtener la cadena para que coincida exactamente el caso que sólo funcionará si parte de los partidos de cuerda arriba.PHP coincidir con una cadena exactamente

Si trato de complicar un poco las cosas usando el código de placa y los patrones de expresiones regulares, se convierte en una pesadilla.

if ($check = '/\[quote(.*?)\](.*?)\[\/quote\]/su') { 
$spam['spam'] = true; 
$spam['error'] .= 'Spam post quote.<br />'; 
} 

Así que si el cargo sólo contenía como una cita sería considerado spam y abandonó pero me parece que no puede resolverlo quizá mis patrones están equivocados.

+0

aflojar downvoter! –

+0

+1 porque es un resultado/error muy real de un idioma que le permite devolver el valor de una tarea. – Joe

+0

@RobAgar this _really_ está depurando 101. Los votos ascendentes son para, que puede ver al pasar el botón de respuesta, "preguntas útiles que muestran el esfuerzo de investigación". Ambos no aplican aquí. – CodeCaster

Respuesta

2

Está utilizando el operador de asignación, =, en lugar del operador de igualdad ==.

Es necesario utilizar

if ($check == 'this is a string') { 
2

if ($check = 'this is a string') asigna la cadena a $check variable que siempre está definida y por lo tanto, devuelve siempre es cierto en el caso de

debería ser if ($check == 'this is a string')

+0

'que siempre está definido y, por lo tanto, devuelve siempre la verdad' - no del todo cierto. Si haces 'if ($ check = 0)' se evaluará a falso. Lo que sucederá aquí es que PHP evaluará el lado derecho de la expresión como booleano. – DaveRandom

+0

exacto, pero siempre que asigne una cadena no vacía, se evaluará a un equivalente verdadero. – dweeves

+0

... a menos que la cadena sea ''0'' – DaveRandom

10

Es necesario utilizar == no solo =

$check = 'this is a string 111'; 
if ($check == 'this is a string') { 
echo 'perfect match'; 
} else { 
echo 'it did not match up'; 
} 

= asignará la variable.

== va a hacer una comparación suelta

=== va a hacer una comparación estricta

Ver comparison operators para más información.

+1

Si realmente quiere ser exacto, use la comparación estricta (' === ') operador, de lo contrario, la siguiente es verdadera:' if ('123' == 123) ' –

+0

Gracias funcionó para mi cadena básica, pero no cuando empiezo a complicar las cosas con patrones de expresiones regulares – C0nw0nk

+0

Sí, las comparaciones de cadenas no funcionarán regex ... para eso necesitarías hacer un preg_match - http://php.net/manual/en/function.preg-match.php – Nick

3

Para la comparación de igualdad desea el operador ==. = es asignación.

if ($check = 'this is a string') { 

debería ser

if ($check == 'this is a string') { 

No se preocupe, todos hemos hecho. Todavía lo hago :)

2

== El operador de comparación funcionará en la mayoría de los casos, pero no hace una coincidencia exacta en algunos casos extremos *.

Usar el operador === es lo mejor.

if ($check === 'this is a string') { 

Un ejemplo donde == funciona de forma inesperada

$check = '2'; 
if ($check == '   2') { 
Cuestiones relacionadas