2013-02-20 13 views
13

Devo verificare se una parola inizia con una sottostringa particolare che ignora le differenze tra maiuscole e minuscole. Ho eseguito questo controllo usando il seguente schema di ricerca regolare, ma questo non aiuta quando c'è differenza nel caso attraverso le stringhe.Regex per verificare se la stringa inizia con, ignorando le differenze tra maiuscole

mio caso maniera sensibile:

var searchPattern = new RegExp('^' + query); 
if (searchPattern.test(stringToCheck)) {} 

risposta

34

Passare il modificatore di i come secondo argomento:

new RegExp('^' + query, 'i'); 

Date un'occhiata al the documentation per ulteriori informazioni.

+1

Grazie per la risposta rapida! Accettiamo non appena SO permetta! –

2

In questo page è possibile vedere che i modificatori possono essere aggiunti come secondo parametro. Nel tuo caso si sta alla ricerca di 'i' (canse insensitive)

//Syntax 
var patt=new RegExp(pattern,modifiers); 

//or more simply: 

var patt=/pattern/modifiers; 
+1

Non raccomandare w3schools.com. Vedi http://w3fools.com perché. –

+0

@ MarcelKorpel fatto .. Ho appena cambiato con altri che ho visto su Google. Grazie! – SERPRO

13

Non hai bisogno di un'espressione regolare a tutti, basta confrontare le stringhe:

if (stringToCheck.substr(0, query.length).toUpperCase() == query.toUpperCase()) 

Demo: http://jsfiddle.net/Guffa/AMD7V/

In questo modo si gestiscono anche casi in cui è necessario sfuggire ai caratteri per far funzionare la soluzione RegExp, ad esempio se query="4*5?", che corrisponderebbe sempre a tutto il resto.

+0

questo metodo è più performante rispetto alla ricerca regex? –

+3

@ user01: Sì, l'ho provato nei tre browser che ho installato, ed è più veloce in tutti loro: http://jsperf.com/regex-vs-compare – Guffa

+1

+1 e grazie. Vorrei andare con questa soluzione, ma per quanto riguarda la domanda posta sulla regex, dovrei accettare la risposta acc a questo. –

2

Penso che tutte le risposte precedenti siano corrette ecco un altro esempio simile a SERPRO ma la differenza è che non esiste un nuovo costruttore: Avviso: ignoro maiuscole e^significa che iniziano con.

var whatEverString = "My test String"; 
var pattern = /^my/i 
var result = pattern.test(whatEverString); 
if (result === true) { 
    console.log(pattern, "pattern did match !"); 
} else { 
    console.log(pattern, " pattern did NOT match"); 

} 

Ecco la jsfiddle se si desidera fare un tentativo.

enter image description here

Problemi correlati