Miten tarkistan, sisältääkö merkkijono tietyn sanan?
Harkitse:
$a = 'How are you?';
if ($a contains 'are')
echo 'true';
Oletetaan, että minulla on yllä oleva koodi, mikä on oikea tapa kirjoittaa lauseke if ($a sisältää 'are')
?
2663
3
Voit käyttää funktiota
strpos()
, jota käytetään yhden merkkijonon löytämiseen toisen merkkijonon sisältä:Huomaa, että
!== false
on tarkoituksellinen (!= false
tai=== true
eivät palauta haluttua tulosta);strpos()
palauttaa joko siirtymän, josta neulan merkkijono alkaa heinäsuovassa, tai booleanfalse
, jos neulaa ei löydy. Koska 0 on kelvollinen offset ja 0 on "falsey", emme voi'käyttää yksinkertaisempia konstruktioita kuten!strpos($a, 'are')
.Voisit käyttää säännöllisiä lausekkeita, se on parempi sanojen sovittamiseen kuin
strpos
, kuten muut käyttäjät ovat maininneet, ja se palauttaa myös tosiasioita merkkijonoille, kuten fare, care, stare jne. Tämä voidaan yksinkertaisesti välttää säännöllisissä lausekkeissa käyttämällä sanarajoja.Yksinkertainen täsmääminen sanalle are voisi näyttää tältä:
Suorituskyvyn kannalta
strpos
on noin kolme kertaa nopeampi, ja pitää muistaa, että kun tein miljoona vertailua kerralla,preg_match
tarvitsi 1,5 sekuntia jastrpos
0,5 sekuntia.Muokkaa: Jos haluat etsiä mitä tahansa osaa merkkijonosta, etkä vain sana sanalta, suosittelen käyttämään säännöllistä lauseketta kuten
Säännöllisen lausekkeen lopussa oleva
i
muuttaa säännöllisen lausekkeen niin, että se ei huomioi isoja ja pieniä kirjaimia, jos et halua sitä, voit jättää sen pois.Tämä voi olla melko ongelmallista joissakin tapauksissa, koska $search-merkkijonoa ei ole puhdistettu millään tavalla, tarkoitan, että se ei ehkä läpäise tarkistusta joissakin tapauksissa, koska jos
$search
on käyttäjän syöttö, hän voi lisätä merkkijonon, joka saattaa käyttäytyä kuin jokin muu säännöllinen lauseke...Tässä'on myös hyvä työkalu, jolla voi testata ja nähdä selityksiä erilaisista säännöllisistä lausekkeista Regex101.
Jos haluat yhdistää molemmat toiminnot yhdeksi monikäyttöiseksi funktioksi (jossa on myös valittavissa isojen ja pienten kirjainten herkkyys), voit käyttää jotakin tämän kaltaista:
Katso
strpos()
: