2012-03-08 7 views
5

Sto cercando di prendere il valore di un campo di testo di input e di usarlo all'interno di un'espressione regolare. Ecco cosa devo abbinare all'inizio di una linea.Escape di una variabile all'interno di un'espressione regolare

regex = new RegExp('^' + inputValue, 'i') 

Funziona bene per le stringhe regolari che iniziano avere caratteri alfanumerici, ma io sto usando questo per gli importi in dollari pure. Quando il campo di input inizia con un '$' (simbolo del dollaro) ottengo risultati variabili.

Come posso evitare la variabile sopra per essere visualizzata come una stringa semplice? Ho provato questo, ma senza fortuna:

regex = new RegExp('^[' + inputValue + ']', 'i') 
+0

PHP ha 'funzione preg_quote ', Non credo che JavaScript ne abbia uno. La funzione PHP sfugge '. \ + *? [^] $() {} =! < > | : -', quindi credo che li sostituiremo con le loro versioni di escape. –

+2

Guarda la risposta in questa domanda http://stackoverflow.com/questions/3614440/replicate-the-functionality-of-javas-pattern-quote-in-a-javascript-regexp – Danny

+1

[This] (http: // simonwillison.net/2006/Jan/20/escape/#p-6) forse. – pimvdb

risposta

3

Probabilmente una delle implementazioni migliori che ho visto

http://phpjs.org/functions/preg_quote:491

Copiato sotto per i posteri

function preg_quote (str, delimiter) { 
    // Quote regular expression characters plus an optional character 
    // 
    // version: 1109.2015 
    // discuss at: http://phpjs.org/functions/preg_quote // + original by: booeyOH 
    // + improved by: Ates Goral (http://magnetiq.com) 
    // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // + bugfixed by: Onno Marsman 
    // + improved by: Brett Zamir (http://brett-zamir.me) // *  example 1: preg_quote("$40"); 
    // *  returns 1: '\$40' 
    // *  example 2: preg_quote("*RRRING* Hello?"); 
    // *  returns 2: '\*RRRING\* Hello\?' 
    // *  example 3: preg_quote("\\.+*?[^]$(){}=!<>|:"); // *  returns 3: '\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:' 
    return (str + '').replace(new RegExp('[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\' + (delimiter || '') + '-]', 'g'), '\\$&'); 
} 
1

$ corrisponde alla fine di una linea, quindi se si InputValue inizia con $, siete alla ricerca di corrispondenze come ^$9.99, che ovviamente solito corrispondono a nulla perché può 9.99 Veniamo DOPO la fine di una linea.

se $ è l'unico personaggio siete preoccupati, si può semplicemente eseguire InputValue attraverso una ricerca/sostituzione in modo che $ è sfuggito a \$.

0

Non hai pensato di controllare se la stringa inizia con il tuo input con indexOf?

farlo nel modo seguente:

var inputValue = "some"; 
if ("some string".indexOf(inputValue.toLowerCase()) == 0) { 
    // test passed 
} 
Problemi correlati