Pertanyaan Bagaimana cara memeriksa apakah string berisi substring? [duplikat]


Pertanyaan ini sudah memiliki jawaban di sini:

Saya memiliki keranjang belanja yang menampilkan opsi produk di menu tarik-turun dan jika mereka memilih "ya", saya ingin membuat beberapa bidang lain pada halaman terlihat.

Masalahnya adalah keranjang belanja juga menyertakan pengubah harga dalam teks, yang bisa berbeda untuk setiap produk. Kode berikut berfungsi:

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

Namun saya lebih suka menggunakan sesuatu seperti ini, yang tidak berfungsi:

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

Saya hanya ingin melakukan tindakan jika opsi yang dipilih mengandung kata "Ya", dan akan mengabaikan pengubah harga.


853
2017-08-13 21:25


asal


Jawaban:


Seperti ini:

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

... atau Anda dapat menggunakan operator tilde:

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

Ini berfungsi karena indexOf() kembali -1 jika senar itu tidak ditemukan sama sekali.

Perhatikan bahwa ini peka huruf besar kecil.
Jika Anda menginginkan pencarian case-insensitive, Anda dapat menulis

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

Atau,

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

1889
2017-08-13 21:28



Anda bisa menggunakannya pencarian atau pertandingan untuk ini.

str.search( 'Yes' )

akan mengembalikan posisi pertandingan, atau -1 jika tidak ditemukan.


108
2017-08-13 21:29



Cara lain:

var testStr = "This is a test";

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

** Diuji di Firefox, Safari 6, dan Chrome 36 **


24
2018-02-20 19:44



Sangat terlambat untuk menulis jawaban ini, tetapi saya berpikir untuk memasukkannya. String.prototype sekarang punya metode includes yang dapat memeriksa substring. Metode ini peka huruf besar kecil.

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

Untuk memeriksa substring, pendekatan berikut dapat diambil:

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

Lihat dokumentasi untuk mengetahui lebih lanjut.


23
2018-05-07 13:38



ECMAScript 6 memperkenalkan String.prototype.includes, sebelumnya bernama contains.

Ini dapat digunakan seperti ini:

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

Ini juga menerima argumen kedua opsional yang menentukan posisi untuk memulai pencarian:

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

Itu bisa polyfilled untuk membuatnya berfungsi di peramban lama.


9
2018-04-16 23:00



Anda dapat menggunakan Polyfill ini di dalamnya dan krom

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

7
2017-07-03 14:09



Mengembalikan berapa kali kata kunci dimasukkan dalam string.

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

6
2017-10-18 05:12



Metode include () menentukan apakah satu string dapat ditemukan dalam string lain, mengembalikan true atau false yang sesuai.

Syntax: -string.includes (searchString [, posisi])

searchString: -Sebuah string yang harus dicari dalam string ini.

posisi: -Opsional. Posisi dalam string ini untuk mulai mencari searchString; standar ke 0.

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

3
2017-11-18 17:45



Saya tahu bahwa cara terbaik adalah str.indexOf(s) !== -1;  http://hayageek.com/javascript-string-contains/

Saya menyarankan cara lain (str.replace(s1, "") !== str):

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


2
2017-10-01 06:05



Jika Anda mampu menggunakan pustaka, Anda mungkin menemukannya Lo-Dash Perpustakaan JS sangat berguna. Dalam hal ini, lanjutkan dan periksa _.contains() (digantikan oleh _.includes() mulai dari v4).

(Catatan Lo-Dash konvensi adalah penamaan objek perpustakaan _. Jangan lupa untuk memeriksa instalasi di halaman yang sama untuk mengaturnya untuk proyek Anda.)

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

Dalam kasus Anda, lanjutkan dan gunakan:

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

..whichever yang Anda suka lebih baik.


2
2017-10-01 06:18



Anda juga dapat memeriksa apakah kata yang tepat terdapat dalam string. Misalnya.:

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

Pemakaian:

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

Ini adalah bagaimana jQuery melakukan metode hasClass.


1
2018-03-26 15:43