2012-12-11 20 views
5

Io davvero non capisco il motivo per cui il seguente codice doesnt abbinare l'espressione regolarepattern.test non è una funzione

$val = "12/11/2012"; 
$opts = {"rule" : "required|format", "format" : {"pattern" : /^\d{1,2}\/\d{1,2}\/\d{4}$/, "errorMsg" : "Invalid date. Allowed allowed: mm/dd/yyyy"}}; 

if(rule=="format" && typeof $opts.format.pattern==="string") { 
    try { 
     var pattern = (typeof $opts.format.pattern==="object") ? $opts.format.pattern : new Regex($opts.format.pattern, "g"); 
     if(pattern.test($val)) { // $val contains 12/11/2012 
      alert("Invalid Date!"); // Shows invalid format 
     } 
    } catch(err){ 
     alert(err.message); // shows pattern.test is not a function 
    } 
} 
+6

sembra funzionare bene quando isolato http://jsbin.com/uviwic/2/edit. Il problema deve essere da qualche altra parte ... – elclanrs

+0

Prova ad aggiungere alla condizione, 'if (pattern &&! Pattern.test ($ val))'. Forse l'oggetto 'RegExp' non si è compilato per qualche motivo. –

+0

Hai già una proprietà 'test' definita nell'oggetto' pattern'? – adeneo

risposta

1

Il problema è che $opts.format.pattern non è una stringa, si tratta di un oggetto RegEx.

Quindi questo funzionerà:

var $val = "12/11/2012"; 
var $opts = {"rule" : "required|format", "format" : {"pattern" : /^\d{1,2}\/\d{1,2}\/\d{4}$/, "errorMsg" : "Invalid date. Allowed allowed: mm/dd/yyyy"}}; 

if ($opts.format.pattern instanceof RegExp) { 
    try { 
    var pattern = $opts.format.pattern; 
    if(!pattern.test($val)) { 
     alert("Invalid date"); 
    } else { 
     alert("Valid date"); 
    } 
    } catch(err){ 
    alert(err.message); // shows pattern.test is not a function 
    } 
}