2016-04-19 7 views
0

У меня есть следующие Regex, что исходит от атрибута данных на HTML-элемент:JQuery Regex из строки

/^$|^[0-9]{2}.[0-9]{4}$/g 

Когда я (вручную) делать:

/^$|^[0-9]{2}.[0-9]{4}$/g.test('01.2012'); 

Он работает и возвращает true.

Когда я поставил Regex в переменной следующим образом:

var inputRegex = $(this).attr('data-validation'); 

И сделать:

inputRegex.test(input); 

я получаю:

inputRegex.test не является функцией.

Я знаю, что это потому, что inputRegex является строка и строка не имеет функцию тестирования, но когда я создаю объект RegExp (new RegExp($(this).attr('data-validation')) он разбивает мое регулярное выражение, убегая:

/\/^$|^[0-9]{2}.[0-9]{4}$\/g/ 

Как я могу использовать значение атрибута data как регулярное выражение? Обратите внимание, что я не могу сделать: var regex = new RegExp(string, 'g');, потому что регулярное выражение (ы) задано из атрибута.

+0

Вы не должны использовать '/ G' с' RegExp.test'. –

+0

Когда вы читаете значение из 'data-validation', оно считывается как строка. Вы можете ссылаться на следующую ссылку для [как создать регулярное выражение из строки] (http://stackoverflow.com/questions/4371565/can-you-create-javascript-regexes-on-the-fly-using-string-variables) – Rajesh

+0

Это не имеет никакого отношения к jQuery. –

ответ

0
var pattern = '\d+'; 
var regExp = new RegExp(pattern, 'g'); 
'1234dasf13241234'.match(regExp) 

Это то, что вам нужно?

var pattern = $(this).attr('data-validation');; 
var regExp = new RegExp(pattern, 'g'); 
regExp.test(input); 

в вашем случае

+0

Я должен использовать Regex, поскольку он исходит из атрибута, так как я не контролирую эту часть. Поэтому я не могу создать объект так, как вы предлагаете. – Sebastian

+0

Отметьте обновленный ответ. Я не видел разницы - вы можете создать обратный вызов? или какой lib вы используете? –

0

Это может помочь

var validation = "/^$|^[0-9]{2}.[0-9]{4}$/g"; //$(this).attr('data-validation') 
var startIndex = validation.indexOf('/')+1 
var lastIndex = validation.lastIndexOf('/'); 
var pattern = validation.substring(startIndex,lastIndex); 
var options = validation.substring(lastIndex+1); 
var regExp = new RegExp(pattern, options); 
regExp.test('01.2012'); 
// true 
0

ваша проблема в том, что вам нужно, чтобы получить шаблон регулярного выражения из атрибута элемента, но она возвращается строку, и вы хотите, чтобы строковое значение было как inline в вашем javascript-коде, как объявление явно регулярного выражения. Если это действительно то, что вы хотите достичь, ближайшее решение заключается в использовании Eval функции см обновленного код ниже:

var stringreg = "var inputRegex =" + $("#test").attr('data-validation') + ";" 
eval(stringreg); 
inputRegex.test(input); 
Смежные вопросы