2012-10-22 9 views
8

Eventuali duplicati:
JavaScript: string containsse variabile contiene

Ho una variabile di Cap e si desidera utilizzare JS per aggiungere una posizione in una variabile diversa quando il codice postale è cambiato/entrato. Ad esempio, se si inserisce ST6, vorrei inserire Stoke North.

In qualche modo ho bisogno di fare una dichiarazione if per passare attraverso ad es.

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

ecc ...

Come potrei fare per questo? Non sta controllando se 'code' è uguale a un valore ma se contiene un valore, penso che questo sia il mio problema.

+0

Ecco un punto di riferimento per i metodi più comuni per verificare se una stringa si trova in una stringa: http://jsben.ch/#/o6KmH – EscapeNetscape

risposta

27

Si potrebbe desiderare indexOf

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

Verifica se contains è ovunque nella variabile stringcode. Ciò richiede che code sia una stringa. Se si desidera che questa soluzione non abbia distinzione tra maiuscole e minuscole, è necessario cambiare il caso con lo stesso String.toLowerCase() o String.toUpperCase().

Si potrebbe anche lavorare con una dichiarazione switch come

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

Grandi cose, grazie. –

8

è possibile utilizzare un'espressione regolare:

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

+1 per insensibilità alle maiuscole e semplici –

1

Il modo più veloce per verificare se una stringa contiene un'altra stringa è utilizzare indexOf:

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

indexOf restituisce '-1' se la stringa non viene trovata. Restituirà '0' se la stringa inizia con' ST1'. Questa risposta è sbagliata. Controllate se 'code' inizia con' ST1' non se è ovunque * contenuto * in 'code'. – clentfort

+0

@clentfort grazie, scoreggia cervello. – jbabey

2

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

0

Se si dispone di molti di questi per verificare che si potrebbe desiderare di memorizzare un elenco dei mapping e basta ricorrere a quello, invece di avere un mazzo o f if/else dichiarazioni. Qualcosa di simile:

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

In questo modo è possibile aggiungere facilmente più mapping di codice/posizione. E se vuoi gestire più di una posizione, puoi semplicemente creare una serie di posizioni nella funzione invece di restituire la prima che trovi.