2012-10-22 5 views
8

Powiel możliwe:
JavaScript: string containsjeśli zmienna zawiera

Mam zmienną kod pocztowy i chcesz użyć JS aby dodać lokalizację do innej zmiennej, gdy kod pocztowy zostanie zmieniony/wprowadzony. Jeśli na przykład wpisano ST6, chciałbym, aby wprowadzono Stoke North.

Muszę jakoś wykonać instrukcję if, aby przejść np.

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

etc ...

Jak pójdę na ten temat? Nie sprawdza, czy "kod" jest równy wartości, ale jeśli zawiera wartość, myślę, że to jest mój problem.

+0

Oto punkt odniesienia dla najczęstszych sposobów sprawdzania, czy ciąg znaków jest w ciągu znaków: http://jsben.ch/#/o6KmH – EscapeNetscape

Odpowiedz

27

Możesz chcieć indexOf

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

Sprawdza czy contains jest nigdzie w string zmiennej code. Wymaga to, aby code był łańcuchem. Jeśli chcesz, aby to rozwiązanie było bez rozróżniania wielkości liter, musisz zmienić skrzynkę na taką samą z String.toLowerCase() lub String.toUpperCase().

Można również pracować z switch oświadczenie jak

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

Świetne rzeczy, dziękuję. –

8

Można użyć wyrażenia regularnego:

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

+1 dla miłej i łatwej do rozróżniania wielkości liter –

1

najszybszy sposób, aby sprawdzić, czy ciąg zawiera inny ciąg jest za pomocą indexOf:

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

indexOf zwraca '-1', jeśli łańcuch nie zostanie znaleziony. Zwróci '0', jeśli ciąg zaczyna się od' ST1'. Ta odpowiedź jest błędna. Sprawdzasz, czy 'kod' zaczyna się od' ST1', czy jest nigdzie * zawarte * w 'code'. – clentfort

+0

@ clentfort dzięki, pierdnięcie mózgu. – jbabey

2

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

0

Jeśli masz wiele z nich do sprawdzenia, może chcesz zapisać listę mapowań i po prostu zapętlić to, zamiast mieć o kilka f jeśli instrukcje/else. Coś takiego:

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

W ten sposób można łatwo dodać więcej mapowań kodu/lokalizacji. A jeśli chcesz obsłużyć więcej niż jedną lokalizację, możesz po prostu zbudować szereg lokalizacji w funkcji zamiast po prostu zwrócić pierwszą znalezioną.