JavaScriptの文字列に特定の文字が含まれるか判定する方法(includes, indexOf)
生徒
「先生、JavaScriptで文字列の中に特定の文字が含まれているかどうかを調べる方法ってありますか?」
先生
「うん、JavaScriptではincludes()メソッドやindexOf()メソッドを使うことで、簡単に文字列の中に特定の文字が含まれているかを判定できます。」
生徒
「名前が似ているけど、どう違うんですか?」
先生
「どちらも似た目的で使えるけど、使い方や返ってくる結果が少し違うんだ。ひとつずつ見ていこう。」
1. includesメソッドとは?
includes()メソッドは、指定した文字列が対象の文字列の中に含まれているかを確認するためのメソッドです。結果としてtrue(含まれている)またはfalse(含まれていない)を返します。
たとえば、メールアドレスの中に「@」があるかを確認したり、ユーザー名の中に禁止ワードが含まれていないかチェックしたいときに便利です。
const text = "JavaScriptを学ぼう!";
console.log(text.includes("Java")); // true
console.log(text.includes("Python")); // false
true
false
includes()メソッドは、大文字と小文字を区別します。つまり「Java」と「java」は違う文字列として扱われます。
const message = "Hello World";
console.log(message.includes("world")); // false(小文字なので一致しない)
false
もし大文字・小文字を区別せずに調べたい場合は、両方を同じケース(大文字または小文字)に変換してから調べましょう。
const message = "Hello World";
console.log(message.toLowerCase().includes("world")); // true
true
2. indexOfメソッドとは?
indexOf()メソッドは、指定した文字列が最初に現れる位置(インデックス番号)を返すメソッドです。もし見つからなければ-1を返します。
このメソッドは、特定の単語が「どこに」あるのかを知りたいときにも使えます。
const text = "JavaScriptを使って学ぶプログラミング";
console.log(text.indexOf("JavaScript")); // 0(先頭にある)
console.log(text.indexOf("プログラミング")); // 13(13文字目にある)
console.log(text.indexOf("Python")); // -1(含まれていない)
0
13
-1
indexOf()は、結果が-1でなければ含まれていると判断できます。
const text = "JavaScript入門";
if (text.indexOf("Script") !== -1) {
console.log("含まれています!");
}
含まれています!
3. includesとindexOfの違いを比較しよう
includes()はシンプルに「含まれているかどうか」をtrueかfalseで返すのに対し、indexOf()は「どの位置にあるか」を数値で返します。
| メソッド名 | 返り値 | 使い方の目的 |
|---|---|---|
includes() |
true / false |
文字列が含まれているかを判定 |
indexOf() |
位置(数値)または -1 |
どこにあるかを知りたいとき |
たとえば「検索キーワードが文章のどこに出てくるか」を調べたいならindexOf()を使い、単純に「含まれているかだけをチェックしたい」場合はincludes()が便利です。
4. 部分一致のチェックや応用例
これらのメソッドを使うと、フォーム入力のチェックやデータ検索など、実践的な場面で役立ちます。
たとえば、メールアドレスに「@」が含まれているかを確認する例です。
const email = "example@gmail.com";
if (email.includes("@")) {
console.log("正しいメールアドレスの形式です。");
} else {
console.log("メールアドレスに@が含まれていません。");
}
正しいメールアドレスの形式です。
また、禁止ワードを含むコメントを判定したい場合にも使えます。
const comment = "このサイトは最高!";
if (comment.indexOf("最悪") !== -1) {
console.log("不適切なコメントです。");
} else {
console.log("コメントを受け付けました。");
}
コメントを受け付けました。
このように、includes()とindexOf()はどちらも文字列のチェックに欠かせない基本メソッドです。特にWeb開発や入力チェックのような場面では頻繁に登場します。
5. startsWithとendsWithでの判定
includes()やindexOf()と似た用途として、文字列の「先頭」や「末尾」を判定するメソッドもあります。それがstartsWith()とendsWith()です。
これらは特定の位置にあるかどうかを確認したいときに便利で、URLチェックやファイル名の確認などでよく使われます。
const url = "https://example.com";
console.log(url.startsWith("https")); // true
console.log(url.endsWith(".com")); // true
true
true
startsWith()は先頭から、endsWith()は末尾からチェックするため、目的に応じて使い分けることが大切です。
6. 正規表現を使った高度な判定
より複雑な文字列判定を行いたい場合は、正規表現を使う方法もあります。正規表現とは、特定のパターンに一致するかを調べるための仕組みです。
たとえば、数字が含まれているかをチェックする場合は次のように書きます。
const text = "abc123";
const hasNumber = /\d/.test(text);
console.log(hasNumber);
true
このように正規表現を使うと、より柔軟な条件で文字列を判定することができます。ただし初心者のうちは、まずincludes()やindexOf()をしっかり理解してから使うと良いでしょう。
7. 文字列判定でよくある注意点
文字列の判定では、いくつかの注意点があります。まず大文字と小文字が区別されることです。同じ単語でも書き方が違うと一致しないため、必要に応じてtoLowerCase()などで統一することが重要です。
また、全角と半角の違いにも注意が必要です。日本語を扱う場合は見た目が似ていても別の文字として扱われることがあります。
const text = "ABC";
console.log(text.includes("ABC")); // false
false
このような違いを理解しておくことで、意図しないバグを防ぐことができます。文字列判定はシンプルな処理に見えて、実は細かい違いが結果に影響するため、丁寧に扱うことが大切です。