1. ホーム
  2. javascript

[解決済み] 文字列が部分文字列を含んでいるかどうかを確認するにはどうすればよいですか?重複

2022-03-21 20:04:29

質問

ショッピングカートで商品の選択肢をドロップダウンメニューで表示し、ユーザーが "yes"を選択すると、ページ上の他のフィールドを表示するようにしたいのですが、どうすればよいでしょうか。

問題は、ショッピングカートのテキストに価格の修飾語も含まれており、それが商品ごとに異なる場合があることです。以下のコードは動作します。

$(document).ready(function() {
    $('select[id="Engraving"]').change(function() {
        var str = $('select[id="Engraving"] option:selected').text();
        if (str == "Yes (+ $6.95)") {
            $('.engraving').show();
        } else {
            $('.engraving').hide();
        }
    });
});

しかし、私はむしろこのようなものを使いたいのですが、うまくいきません。

$(document).ready(function() {
    $('select[id="Engraving"]').change(function() {
        var str = $('select[id="Engraving"] option:selected').text();
        if (str *= "Yes") {
            $('.engraving').show();
        } else {
            $('.engraving').hide();
        }
    });
});

選択されたオプションに "Yes" という単語が含まれている場合にのみアクションを実行し、価格修飾子は無視したいのです。

解決方法は?

このように。

if (str.indexOf("Yes") >= 0)

...または、チルダ演算子を使うこともできます。

if (~str.indexOf("Yes"))

これは、次のように動作します。 indexOf()-1 は、文字列が全く見つからなかった場合。

大文字と小文字を区別することに注意してください。
大文字小文字を区別しない検索をしたい場合は、次のように書きます。

if (str.toLowerCase().indexOf("yes") >= 0)

または

if (/yes/i.test(str))

後者は 正規表現 または レジェックス .

Regexの内訳です。

  • / は正規表現であることを示します。
  • yes は、正規表現がこれらの文字を正確な順序で見つけることを意味します。
  • / は正規表現を終了します。
  • i は正規表現を case- に設定します。 センシティブ
  • .test(str) は、正規表現にマッチするかどうかを判断します。 str 要約すると、次の文字が見つかるかどうかということです。 y , e および s の順番で、大文字小文字を区別せずに、変数 str