web-dev-qa-db-fra.com

si la variable contient

Duplicata possible:
JavaScript: la chaîne contient

J'ai une variable de code postal et je souhaite utiliser JS pour ajouter un emplacement dans une variable différente lorsque le code postal est modifié/saisi. Par exemple, si ST6 est entré, je voudrais que Stoke North soit entré.

J'ai en quelque sorte besoin de faire une instruction if pour exécuter par exemple.

if(code contains ST1)
{
    location = stoke central;
}
else if(code contains ST2)
{
    location = stoke north;
} 

etc...

Comment pourrais-je m'y prendre? Ce n'est pas de vérifier si le "code" est égal à une valeur mais s'il contient une valeur, je pense que c'est mon problème.

27
Sean Hawkins

Vous voudrez peut-être indexOf

if (code.indexOf("ST1") >= 0) { ... }
else if (code.indexOf("ST2") >= 0) { ... }

Il vérifie si contains est n'importe où dans la variable stringcode. Cela nécessite que code soit une chaîne. Si vous voulez que cette solution soit insensible à la casse, vous devez tout de même changer la casse avec String.toLowerCase() ou String.toUpperCase().

Vous pouvez également travailler avec une instruction switch comme

switch (true) {
    case (code.indexOf('ST1') >= 0):
        document.write('code contains "ST1"');
        break;
    case (code.indexOf('ST2') >= 0):
        document.write('code contains "ST2"');        
        break;        
    case (code.indexOf('ST3') >= 0):
        document.write('code contains "ST3"');
        break;        
    }​
41
clentfort

Vous pouvez utiliser une expression régulière:

if (/ST1/i.test(code))
11
SLaks

Le moyen le plus rapide de vérifier si une chaîne contient une autre chaîne est d'utiliser indexOf :

if (code.indexOf('ST1') !== -1) {
    // string code has "ST1" in it
} else {
    // string code does not have "ST1" in it
}
2
jbabey

if (code.indexOf("ST1")>=0) { location = "stoke central"; }

2
Antti

Si vous avez beaucoup de ces éléments à vérifier, vous voudrez peut-être stocker une liste des mappages et simplement les parcourir, au lieu d'avoir un tas d'instructions if/else. Quelque chose comme:

var CODE_TO_LOCATION = {
  'ST1': 'stoke central',
  'ST2': 'stoke north',
  // ...
};

function getLocation(text) {
  for (var code in CODE_TO_LOCATION) {
    if (text.indexOf(code) != -1) {
      return CODE_TO_LOCATION[code];
    }
  }
  return null;
}

De cette façon, vous pouvez facilement ajouter plus de mappages de code/emplacement. Et si vous souhaitez gérer plus d'un emplacement, vous pouvez simplement créer un tableau d'emplacements dans la fonction au lieu de simplement renvoyer le premier que vous trouvez.

0
Herms