2016-04-19 15 views
0

Ich habe folgende Regex, die auf einem HTML-Element aus einem Daten Attribut kommt:jQuery Regex von String

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

Wenn ich (manuell) tun:

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

Es funktioniert und gibt true.

Wenn habe ich die Regex in einer Variable wie folgt:

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

Und tun:

inputRegex.test(input); 

ich:

inputRegex.test ist keine Funktion.

Ich weiß, dass dies, weil inputRegex ein String ist und String keine Testfunktion haben, aber wenn ich ein RegExp-Objekt erstellen (new RegExp($(this).attr('data-validation')) es bricht mir Regular Expression durch die Flucht:

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

Wie kann ich den Datenattributwert als regulären Ausdruck verwenden? Bitte beachten Sie, dass ich nicht tun kann: var regex = new RegExp(string, 'g');, weil die regulären Ausdrücke aus dem Attribut vordefiniert sind.

+0

Sie sollten nicht verwenden '/ g' mit' RegExp.test'. –

+0

Wenn Sie den Wert von 'data-validation' lesen, wird er als String gelesen. Sie können folgenden Link für [wie man Regex von String erstellen] (http://stackoverflow.com/questions/4371565/can-you-create-javascript-regexes-on-the-fly-using-string-variables) – Rajesh

+0

verweisen Das hat nichts mit jQuery zu tun. –

Antwort

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

ist es, was Sie brauchen?

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

in Ihrem Fall

+0

Ich muss die Regex verwenden, da sie aus dem Attribut kommt, da ich keine Kontrolle über diesen Teil habe. Also kann ich das Objekt nicht so erstellen, wie du es vorschlägst. – Sebastian

+0

Überprüfen Sie die aktualisierte Antwort. Ich habe keinen Unterschied gesehen - Sie können einen Rückruf erstellen? oder welche lib verwendest du? –

0

Dies könnte

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

Ihr Problem ist, dass Sie das RegexMuster von einem Attribut eines Elements abrufen helfen, aber es kehrt String, und Sie möchten, dass der Zeichenfolgenwert wie inline auf Ihrem Javascript-Code ist, wie das Erklären einfach einer Regex. Wenn dies wirklich das, was Sie erreichen wollen, ist die nächste Lösung eval Funktion finden Sie aktualisierte Code unten verwenden:

var stringreg = "var inputRegex =" + $("#test").attr('data-validation') + ";" 
eval(stringreg); 
inputRegex.test(input);