読者です 読者をやめる 読者になる 読者になる

やるしかなっちゃん

やるしかない!

[JavaScript]文字列がある文字を含むかどうかを調べる方法

これいつもわからなくなるのでまとめる

indexOf

indexOfを使うとある文字列がある文字(列)を含むかどうか調べられる

const str = "hoge"
str.indexOf('g') // 2
str.indexOf('og') // 1
str.indexOf('ou') // -1

特に説明不要がだindexOfの名前の通りその文字(列)のインデックスを返す
なので見つからなかったときは-1が返る
まぁこれは別にいいでしょう

ある文字列の中に幾つかの文字(列)が含まれるかどうか

この時indexOfしか知らないと以下のような産業廃棄物が生まれてしまう

const str = "hogefugapiyo"
// strの中にa, b, cのいずれかが含まれるかどうか
if (str.indexOf('a') != -1 
    || str.indexOf('b') != -1 
    || str.indexOf('c') != -1) {
  // ...
}

これは誰がどう考えても正規表現の出番だと考える
(ちょっと良い例が思い浮かばないのでこれでもいいわって思ったならすいません もっと複雑な例を頭の中で補完して下さい)  

正規表現

↑の例と同じことをやりたいなら以下の様なコードに鳴る

const str = "hogefugapiyo"
const pattern = /[abc]/
const result = str.match(pattern)
if (result != null) {
  // ...
}

で、何がいつもわからなくなるの?

indexOfは存在しなければ-1が返る
matchはマッチしなければnullが返る
普通に考えればわかるのだが知能指数の低い僕はいつもmatchを使っているのに-1チェックをしてしまう
長々と書いたけど言いたいことはそれだけ