2010-07-15 9 views
14

tengo una cadena en la variable $str.verificar, si la cadena comienza con la subcadena dada

¿cómo puedo verificar si comienza con alguna palabra?


ejemplo

$str = "http://somesite.com/somefolder/somefile.php";

cuando escribí el siguiente script

if(strpos($str, "http://") == '0') echo "yes"; //returns yes

pero vuelve aun cuando escribí

if(strpos($str, "other word here") == '0') echo "yes"; //returns yes too

Creo que strpos vuelve zero si no puede encontrar la subcadena también (o valor vacío).

así, ¿qué puedo hacer yo, si quiero para verificar la palabra, que en el inicio de la cadena? (Tal vez debo utilizar === en este caso?)

Gracias

+2

1 porque veo a menudo personas que tienen el mismo problema – Iacopo

Respuesta

7

Debe verificar con el identity operator (===), vea el documentation.

+0

hmmm, pero ¿cómo? debo verificar si '===' ¿a qué? – Simon

+1

@Syom: Su prueba se convierte en 'if (strpos ($ str," http: // ") === 0) echo" yes "; // devuelve yes' –

+0

Antes que nada, quizás sea mejor usar stripos() para estos casos de uso dado que la url es parcialmente insensible a mayúsculas y minúsculas. Además, si también desea buscar https: // en una expresión, use if (preg_match ("#https?: // # i", $ str)) echo "yes"; – mvds

28

que tiene que hacer:

if (strpos($str, "http://") === 0) echo "yes" 

El operador === es una comparación estricta de que no obliga a los tipos. Si usa == y luego false, una cadena vacía, null, 0, una matriz vacía y algunas otras cosas serán equivalentes.

Ver Type Juggling.

+1

Entero '0' obviamente, no cadena' '0'' – Joost

+0

@JoostK: en realidad ''0' == 0' se evalúa como' verdadero'. – cletus

+2

¡Vamos, de eso se trata esta publicación! – Joost

0
if(substr($str, 0, 7)=="http://") { 
    echo("Statrs with http://"); 
} 
0

Hay una gran advertencia de color rojo en the documentation en esto:

Esta función puede devolver FALSE, pero también puede devolver un valor no-booleano que será evaluado FALSE, como 0 o "" . Lea la sección sobre Booleanos para más información. Use el operador === para probar el valor de retorno de esta función.

strpos puede volver 0 o false. 0 es igual a false (0 == false). No es idéntico a falso, sin embargo, que puede probar con 0 === false. Entonces, la prueba correcta es if (strpos(...) === 0).

Asegúrese de leer sobre la diferencia, es importante: http://php.net/manual/en/language.operators.comparison.php

2

cheque con

if(strpos($str, "http://") === 0) echo "yes"; 

como == será positivo para ambos falsa & 0 cheque el documentation

+1

¿por qué no puedo escribir ''0'' insted of' 0'? – Simon

+1

Porque 'strpos' devuelve un entero si se ha encontrado la cadena. '===' solo coincide si los tipos también coinciden, por lo que '0 === '0'' no coincidirá, ya que difieren en el tipo (cadena frente a entero) – Joost

2

PHP tiene 2 funciones para verificar si una cadena comienza con una subcadena dada:

  • strncmp (mayúsculas y minúsculas);
  • strncasecmp (sin distinción de mayúsculas y minúsculas);

Así que si sólo desea probar http (y no https), puede utilizar:

if (strncasecmp($str,'http://',7) == 0) echo "we have a winner" 
0
strncmp($str, $word, strlen($word))===0 

es un poco más rendimiento inferior strpos

Cuestiones relacionadas