Edited at

【PHP】特定の文字列を含むかのチェック

More than 3 years have passed since last update.


正規表現を使わない場合

strpos,strstr,preg_matchではstrposが最も早いのでstrposを使う。

PHPマニュアルにもそのように書いてある。


strstr

もし特定の haystack に needle があるかどうかを調べるだけの場合、 より高速でメモリ消費も少ない strpos() を代わりに使用してください。


strposは、該当する文字列が見つからなかった場合は、falseを返す。

該当する文字列が見つかった位置を数値で返すので(※1)、型までチェックする必要がある。そのため、===falseもしくは!==falseを使うこと。

※1例えば、strpos('abcd','ab')は0を返す。

if(strpos($subject,'bc') !== false){

//'abcd'のなかに'bc'が含まれている場合
}

if(strpos($subject,'bc') === false){
//'abcd'のなかに'bc'が含まれていない場合
}

参考

strposとstrstrの速度比較

※名前が半角スペースまたは全角スペースで名字と名前が区切られている文字列を、名字と名前で取得

if(strpos($data['User']['name'],' ') !== false){

//全角スペース区切り
list($lastname,$firstname) = explode(' ',$data['User']['name']);

}elseif(strpos($data['User']['name'],' ') !== false){
//半角スペース区切り
list($lastname,$firstname) = explode(' ',$data['User']['name']);
}else{
//スペースなし区切り
$lastname = $data['User']['name'];
$firstname = '';
}


正規表現を使う場合

preg_matchを使う。

preg_matchはマッチした場合は1を返す。マッチしなかった場合は0を返す。

if(preg_match('/bc/',$subject)){

//$subjectのなかにbcが含まれている場合
}

if(!preg_match('/bc/',$subject)){
//$subjectのなかにbcが含まれていない場合
}