2010-07-15 29 views
14

ho una stringa nella variabile $str.verifica, se la stringa inizia con una sottostringa data

come posso verificare se inizia con qualche parola?


esempio

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

quando ho scritto il seguente script

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

ma restituisce anche quando ho scritto

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

Penso che strpos rendimenti zero se non riesce a trovare sottostringa troppo (o valore vuoto).

così, cosa posso fare, se voglio per verificare la parola, che in avvio di corda? (Forse devo usare === in questo caso?)

Grazie

+2

+1 perché vedo spesso persone che hanno lo stesso problema – Iacopo

risposta

7

Si dovrebbe verificare con identity operator (===), vedere documentation.

+0

hmmm, ma come? devo verificare se è '===' a cosa? – Simon

+1

@Syom: il test diventa: 'if (strpos ($ str," http: // ") === 0) echo" sì "; // restituisce yes' –

+0

Prima di tutto, forse è meglio usare stripos() per questi casi d'uso dato che l'url è parzialmente non sensibile al maiuscolo/minuscolo. Inoltre, se si desidera verificare https: // in un'espressione, utilizzare if (preg_match ("#https?: // # i", $ str)) echo "sì"; – mvds

28

quello che devi fare:

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

L'operatore === è un confronto rigoroso che non costringere i tipi. Se si utilizza == quindi false, una stringa vuota, null, 0, una matrice vuota e alcune altre cose saranno equivalenti.

Vedere Type Juggling.

+1

Integer '0' ovviamente, non stringa' '0'' – Joost

+0

@JoostK: in realtà '' 0 '== 0' restituisce' vero'. – cletus

+2

Andiamo, è proprio quello di cui parla questo intero post! – Joost

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

C'è un grande allarme rosso in the documentation su questo:

Questa funzione può restituire il Booleano FALSE, ma può anche restituire un valore non-Booleano valutato come FALSE, come ad esempio 0 o "" . Si prega di leggere la sezione su Booleans per ulteriori informazioni. Utilizzare l'operatore === per verificare il valore restituito da questa funzione.

strpos può restituire 0 o false. 0 è uguale a false (0 == false). Non è identico a a false, che è possibile testare con 0 === false. Quindi il test corretto è if (strpos(...) === 0).

Assicurarsi di leggere sulla differenza, è importante: http://php.net/manual/en/language.operators.comparison.php

2

controllo con

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

come == si trasformerà positivo sia falsa & 0 controllo l'Un'altra opzione documentation

+1

perché non riesco a scrivere ''0'' insted di' 0'? – Simon

+1

Perché 'strpos' restituisce un intero se la stringa è stata trovata. '===' corrisponde solo se i tipi corrispondono, quindi '0 === '0'' non corrisponderà, poiché differiscono nel tipo (stringa vs. intero) – Joost

2

PHP ha 2 funzioni per verificare se una stringa inizia con una determinata stringa:

  • strncmp (case sensitive);
  • strncasecmp (senza distinzione tra maiuscole e minuscole);

Quindi, se si desidera verificare solo http (e non https), è possibile utilizzare:

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

è un po 'più performante di strpos

Problemi correlati