2012-10-22 6 views
8

Mögliche Duplizieren enthält:
JavaScript: string containswenn variable

Ich habe eine Postleitzahl Variable und wollen JS verwenden, um eine Position in eine andere Variable hinzuzufügen, wenn die Postleitzahl geändert/eingetragen. Wenn beispielsweise ST6 eingegeben wird, möchte ich, dass Stoke North eingegeben wird.

Ich muss irgendwie eine if-Anweisung zu tun, z.

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

etc ...

Wie würde ich über diese gehen? Es überprüft nicht, ob "Code" einem Wert entspricht, aber wenn es einen Wert enthält, denke ich, dass dies mein Problem ist.

+0

Hier ein Benchmark für die gängigsten Möglichkeiten, um zu überprüfen, ob eine Zeichenkette in einer Zeichenkette ist: http://jsben.ch/#/o6KmH – EscapeNetscape

Antwort

27

Sie indexOf

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

wollen könnte es überprüft, ob contains überall in der string Variable code ist. Dies erfordert code als Zeichenfolge. Wenn Sie möchten, dass diese Groß-/Kleinschreibung nicht berücksichtigt wird, müssen Sie den Fall entweder mit String.toLowerCase() oder String.toUpperCase() ändern.

Sie könnten auch mit einer switch Aussage arbeiten wie

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;   
    }​ 
+0

Tolles Zeug, danke. –

8

können Sie einen regulären Ausdruck verwenden:

if (/ST1/i.test(code)) 
+1

+1 für nette und einfache Groß- und Kleinschreibung –

1

Der schnellste Weg, um zu überprüfen, ob ein String eine andere Zeichenfolge enthält, ist mit indexOf:

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

indexOf gibt '-1' zurück, wenn die Zeichenfolge nicht gefunden wird. Es wird '0' zurückgeben, wenn die Zeichenfolge mit 'ST1' beginnt. Diese Antwort ist falsch. Sie überprüfen, ob 'code' mit' ST1' beginnt, nicht wenn es irgendwo * in * code' enthalten ist. – clentfort

+0

@clentfort danke, gehirn furzen. – jbabey

2

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

0

Wenn Sie eine Menge von diesen, um zu überprüfen, dass Sie vielleicht eine Liste der Zuordnungen speichern möchten und einfach über diese Schleife, anstatt einen Haufen o f if/else-Anweisungen. Etwas wie:

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; 
} 

Auf diese Weise können Sie einfach weitere Code/Ort-Zuordnungen hinzufügen. Und wenn Sie mehr als einen Standort verwalten möchten, können Sie einfach ein Array von Speicherorten in der Funktion erstellen, anstatt nur den ersten zurückzugeben, den Sie finden.

Verwandte Themen