web-dev-qa-db-ja.com

文字列に部分文字列が含まれているかどうかをどうやって確認するのですか?

ドロップダウンメニューに製品オプションを表示するショッピングカートがあります。それらが[はい]を選択した場合は、ページ上の他のフィールドを表示するようにします。

問題は、ショッピングカートのテキストに価格修飾子も含まれていることです。これは商品ごとに異なる可能性があります。次のコードは機能します。

$(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();
        }
    });
});

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

914
Jordan Garis

このような:

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

...または、チルダ演算子を使用できます。

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

文字列がまったく見つからなかった場合、indexOf()-1を返すので、これはうまくいきます。

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

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

または、

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

これには search または match を使用できます。

str.search( 'Yes' )

マッチの位置を返します。見つからなかった場合は-1を返します。

115
hookedonwinter

別の方法:

var testStr = "This is a test";

if(testStr.contains("test")){
    alert("String Found");
}

** Firefox、Safari 6、およびChrome 36でテスト済み**

26
Andy Braham

この回答を書くのはかなり遅れていますが、とにかく含めることを考えました。 String.prototypeにサブストリングをチェックできるメソッドincludesが追加されました。この方法では大文字と小文字が区別されます。

var str = 'It was a good date';
console.log(str.includes('good')); // shows true
console.log(str.includes('Good')); // shows false

部分文字列をチェックするには、次のようにします。

if (mainString.toLowerCase().includes(substringToCheck.toLowerCase())) {
    // mainString contains substringToCheck
}

詳細については ドキュメント をチェックしてください。

24
Munim Dibosh

ECMAScript 6では、以前はcontainsと呼ばれていた String.prototype.includes が導入されました。

それはこのように使用することができます:

'foobar'.includes('foo'); // true
'foobar'.includes('baz'); // false

また、検索を開始する位置を指定するオプションの2番目の引数も受け入れます。

'foobar'.includes('foo', 1); // false
'foobar'.includes('bar', 1); // true

polyfilled は古いブラウザで動くようにすることができます。

11
Oriol

あなたはieとchromeでこのPolyfillを使うことができます

if (!('contains' in String.prototype)) {
    String.prototype.contains = function (str, startIndex) {
        "use strict";
        return -1 !== String.prototype.indexOf.call(this, str, startIndex);
    };
}
7
robkorv

キーワードが文字列に含まれる回数を返します。

var count = "I have one keyword".match(/keyword/g);
var clean_count = !count ? false : count.length;
7
Kareem

Includes()メソッドは、ある文字列が別の文字列の中にあるかどうかを判断し、必要に応じてtrueまたはfalseを返します。

構文:-string.includes(searchString [、position])

searchString: - この文字列内で検索される文字列。

位置: - オプション。この文字列内でsearchStringの検索を開始する位置。デフォルトは0です。

string = 'LOL';
console.log(string.includes('lol')); // returns false 
console.log(string.includes('LOL')); // returns true 
4
Parth Raval

最善の方法はstr.indexOf(s) !== -1;http://hayageek.com/javascript-string-contains/ です。

私は別の方法を提案します(str.replace(s1, "") !== str):

var str = "Hello World!", s1 = "Ello", s2 = "elloo";
alert(str.replace(s1, "") !== str);
alert(str.replace(s2, "") !== str);
2

あなたがライブラリを使うことができるならば、あなたは Lo-Dash JSライブラリが非常に有用であることを見つけるかもしれません。この場合は、先に進んで_.contains()をチェックしてください(v4では_.includes()に置き換えられました)。

(注Lo-Dashの規則では、ライブラリオブジェクトの名前を_にしています。同じページでインストールをチェックして、プロジェクト用に設定することを忘れないでください。)

_.contains("foo", "oo");     // → true
_.contains("foo", "bar");    // → false
// Equivalent with:
_("foo").contains("oo");     // → true
_("foo").contains("bar");    // → false

あなたのケースでは、先に行き、使用してください:

_.contains(str, "Yes");
// or:
_(str).contains("Yes");

..どちらが好きです。

2
Selfish

正確なWordが文字列に含まれているかどうかも確認できます。例えば。:

function containsWord(haystack, needle) {
    return (" " + haystack + " ").indexOf(" " + needle + " ") !== -1;
}

使用法:

containsWord("red green blue", "red"); // true
containsWord("red green blue", "green"); // true
containsWord("red green blue", "blue"); // true
containsWord("red green blue", "yellow"); // false

これがjQueryがhasClassメソッドを実行する方法です。

1
bashaus

空白のスペースがあったので上記のどれも私のために働きませんでしたが、これは私がしたことです

tr = table.getElementsByTagName("tr");

    for (i = 0; i < tr.length; i++) {
        td = tr[i].getElementsByTagName("td")[0];
        bottab.style.display="none";
        bottab2.style.display="none";
        if (td) {
        var getvar=td.outerText.replace(/\s+/, "") ;

            if (getvar==filter){
                tr[i].style.display = "";
            }else{
                tr[i].style.display = "none";
            }

        }
    }
0