Question Comment puis-je vérifier si la chaîne contient une sous-chaîne? [dupliquer]


Cette question a déjà une réponse ici:

J'ai un panier qui affiche les options de produits dans un menu déroulant et s'ils sélectionnent "oui", je veux que d'autres champs soient visibles sur la page.

Le problème est que le panier inclut également le modificateur de prix dans le texte, qui peut être différent pour chaque produit. Le code suivant fonctionne:

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

Cependant, je préfère utiliser quelque chose comme ça, qui ne fonctionne pas:

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

Je veux seulement effectuer l'action si l'option choisie contient le mot "Oui", et ignorerais le modificateur de prix.


853
2017-08-13 21:25


origine


Réponses:


Comme ça:

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

... ou vous pouvez utiliser l'opérateur tilde:

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

Cela fonctionne parce que indexOf() résultats -1 si la chaîne n'a pas été trouvée du tout.

Notez que ceci est sensible à la casse.
Si vous voulez une recherche insensible à la casse, vous pouvez écrire

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

Ou,

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

1889
2017-08-13 21:28



Vous pourriez utiliser chercher ou rencontre pour ça.

str.search( 'Yes' )

retournera la position du match, ou -1 s'il n'est pas trouvé.


108
2017-08-13 21:29



Autrement:

var testStr = "This is a test";

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

** Testé sur Firefox, Safari 6 et Chrome 36 **


24
2018-02-20 19:44



Il est assez tard pour écrire cette réponse, mais j'ai pensé à l'inclure de toute façon. String.prototype a maintenant une méthode includes qui peut vérifier la sous-chaîne. Cette méthode est sensible à la casse.

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

Pour vérifier une sous-chaîne, l'approche suivante peut être prise:

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

Vérifiez Documentation en savoir plus.


23
2018-05-07 13:38



ECMAScript 6 introduit String.prototype.includes, précédemment nommé contains.

Il peut être utilisé comme ceci:

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

Il accepte également un deuxième argument facultatif qui spécifie la position à partir de laquelle commencer la recherche:

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

Ça peut être polyfilled pour le faire fonctionner sur les anciens navigateurs.


9
2018-04-16 23:00



Vous pouvez utiliser ce Polyfill dans ie et chrome

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



Renvoie le nombre de fois que le mot-clé est inclus dans la chaîne.

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

6
2017-10-18 05:12



La méthode includes () détermine si une chaîne peut être trouvée dans une autre chaîne, en retournant true ou false selon le cas.

Syntaxe: -string.includes (searchString [, position])

searchString: -Une chaîne à rechercher dans cette chaîne.

position: -Optional. La position dans cette chaîne à laquelle commencer à chercher searchString; par défaut à 0.

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

3
2017-11-18 17:45



Je sais que le meilleur moyen est str.indexOf(s) !== -1;  http://hayageek.com/javascript-string-contains/

Je suggère une autre façon (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



Si vous êtes capable d'utiliser des bibliothèques, vous pouvez constater que Lo-Dash La bibliothèque JS est très utile. Dans ce cas, allez-y et vérifiez _.contains() (remplacé par _.includes() à partir de v4).

(Remarque La convention Lo-Dash nomme l'objet de bibliothèque _. N'oubliez pas de vérifier l'installation dans la même page pour la configurer pour votre projet.)

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

Dans votre cas, allez-y et utilisez:

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

..whe celui que vous aimez mieux.


2
2017-10-01 06:18



Vous pouvez également vérifier si le mot exact est contenu dans une chaîne. Par exemple.:

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

Usage:

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

C'est ainsi que jQuery fait sa méthode hasClass.


1
2018-03-26 15:43