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

  • 120
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

正規表現を使わない場合

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が含まれていない場合
}