Jak sprawdzić, czy string zawiera podłańcuch? [duplikat]

To pytanie ma już odpowiedź tutaj:

Mam koszyk, który wyświetla opcje produktu w rozwijanym menu i jeśli wybierają "tak", chcę, aby niektóre inne pola na stronie były widoczne.

Problem polega na tym, że Koszyk zawiera również modyfikator ceny w tekście, który może być inny dla każdego produktu. Działa następujący kod:

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

Jednak wolałbym użyć czegoś takiego, co nie działa:

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

Chcę wykonać akcję tylko wtedy, gdy wybrana opcja zawiera słowo " tak " i zignoruje modyfikator ceny.

Author: chŝdk, 2010-08-14

13 answers

Tak:

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

...można też użyć operatora tyldy:

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

To działa, ponieważ indexOf() zwraca -1 jeśli łańcuch nie został znaleziony.

Zauważ, że rozróżnia się wielkość liter.
Jeśli chcesz, aby wyszukiwanie było niewrażliwe na wielkość liter, możesz napisać

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

Lub

if (/yes/i.test(str))
 1894
Author: SLaks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-17 14:45:34

Możesz użyć search lub match do tego.

str.search( 'Yes' )

Zwróci pozycję meczu lub -1, jeśli nie zostanie znaleziona.

 109
Author: hookedonwinter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-13 21:29:00

Inny sposób:

var testStr = "This is a test";

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

** testowane na Firefoksie, Safari 6 i Chrome 36 * *

 25
Author: Andy Braham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-17 19:47:09

Jest dość późno, aby napisać tę odpowiedź, ale myślałem o włączeniu go tak czy inaczej. {[2] } ma teraz metodę includes, która może sprawdzić podciąg. Ta metoda uwzględnia wielkość liter.

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

Aby sprawdzić podciąg, można zastosować następujące podejście:

if (mainString.toLowerCase().includes(substringToCheck.toLowerCase())) {
    // mainString contains substringToCheck
}
Aby dowiedzieć się więcej, zapoznaj się z dokumentacją .
 24
Author: Munim Dibosh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-07 13:38:00

ECMAScript 6 wprowadza String.prototype.includes, poprzednio Nazwa contains.

Można go używać w następujący sposób:

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

Akceptuje również opcjonalny drugi argument, który określa pozycję, na której należy rozpocząć wyszukiwanie:

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

Może być polyfilled , aby działał na starych przeglądarkach.

 10
Author: Oriol,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-16 23:00:05

Możesz użyć tego Polyfill w ie i chrome

if (!('contains' in String.prototype)) {
    String.prototype.contains = function (str, startIndex) {
        "use strict";
        return -1 !== String.prototype.indexOf.call(this, str, startIndex);
    };
}
 7
Author: robkorv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-03 14:09:12

Zwraca liczbę razy słowo kluczowe jest zawarte w łańcuchu.

var count = "I have one keyword".match(/keyword/g);
var clean_count = !count ? false : count.length;
 7
Author: Kareem,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-17 02:54:36

Metoda includes() określa, czy jeden łańcuch może zostać znaleziony w innym łańcuchu, zwracając odpowiednio true lub false.

Składnia: - string.includes (searchString[, position])

SearchString: - ciąg znaków do przeszukiwania wewnątrz tego ciągu.

Pozycja: - Opcjonalnie. Pozycja w tym łańcuchu, na której należy rozpocząć wyszukiwanie searchString; Domyślnie 0.

string = 'LOL';
console.log(string.includes('lol')); // returns false 
console.log(string.includes('LOL')); // returns true 
 3
Author: Parth Raval,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-20 11:47:12

Wiem, że najlepszym sposobem jest str.indexOf(s) !== -1; http://hayageek.com/javascript-string-contains/

Proponuję inny sposób(str.replace(s1, "") !== str):

var str = "Hello World!", s1 = "ello", s2 = "elloo";
alert(str.replace(s1, "") !== str);
alert(str.replace(s2, "") !== str);
 2
Author: Sherali Turdiyev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-01 06:05:19

Jeśli jesteś w stanie korzystać z bibliotek, może się okazać, że lo-Dash biblioteka JS jest całkiem przydatna. W tym przypadku sprawdź _.contains() (zastąpiony przez _.includes() od wersji v4).

(Uwaga konwencja Lo-Dash nazywa obiekt biblioteki_. Nie zapomnij sprawdzić instalacji na tej samej stronie, aby skonfigurować ją dla swojego projektu.)

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

W Twoim przypadku, śmiało użyj:

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

..który wolisz.

 2
Author: Selfish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-12 16:19:30

Możesz również sprawdzić, czy dokładne słowo jest zawarte w łańcuchu. Np.:

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

Użycie:

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

Tak jQuery robi swoją metodę hasClass.

 1
Author: bashaus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-24 09:04:18

Żadne z powyższych nie działało dla mnie, ponieważ były puste spacje, ale to właśnie zrobiłem

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
Author: Kingsley Mitchell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-17 00:14:17

Możesz zdefiniować metodę rozszerzenia i użyć jej później.

String.prototype.contains = function(it) 
{ 
   return this.indexOf(it) != -1; 
};

Tak, że można użyć na swojej stronie w dowolnym miejscu, jak:

var str="hello how are you";
str.contains("are");

Który zwraca true .

Zobacz poniższy post, aby uzyskać więcej metod pomocniczych rozszerzeń. Javascript helper methods

 -1
Author: Vikas Kottari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-03 13:08:27