Escape переменная в регулярном выражении - PullRequest
5 голосов
/ 08 марта 2012

Я пытаюсь взять значение поля ввода текста и использовать его в регулярном выражении. Вот что мне нужно, чтобы соответствовать началу строки.

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

Работает нормально для обычных строк, начинающихся с буквенно-цифровых символов, но я использую это и для долларовых сумм. Когда поле ввода начинается со знака «$» (знак доллара), я получаю различные результаты.

Как я могу избежать указанной выше переменной, чтобы ее можно было рассматривать как простую строку? Я пробовал это, но не повезло:

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

Ответы [ 3 ]

3 голосов
/ 08 марта 2012

Возможно одна из лучших реализаций, которые я видел

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

Скопировано ниже для потомков

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 голос
/ 08 марта 2012

$ соответствует концу строки, поэтому, если inputValue начинается с $, вы ищете совпадения типа ^$9.99, которые, очевидно, ничего не будут совпадать, потому что 9.99 не может прийти ПОСЛЕ конца строки.

если $ является единственным символом, который вас беспокоит, вы можете просто запустить inputValue через поиск / замену, чтобы $ был переведен в \$.

0 голосов
/ 08 марта 2012

Разве вы не задумывались о том, чтобы просто проверить, начинается ли строка с вашего ввода с indexOf?

Сделайте это следующим образом:

var inputValue = "some";
if ( "some string".indexOf(inputValue.toLowerCase()) == 0 ) {
  // test passed
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...