2012-04-06 18 views
9

Sto cercando di verificare se un campo di input ha l'attributo "pattern" e in tal caso, preformare un controllo regex come detto schema. So che questo è già stato fatto da HTML5, ma voglio gestire l'evento me stessa. Sto ricevendo questo errore: TypeError Uncaught: Object a-zA-Z non ha un metodo 'test'Jquery Convalida Jquery

///Check Perform Reg/////////////////////////////////////////////////////// 
     if ($(this).attr("pattern")) { 
      var reg = $(this).attr("pattern"); 
      var currentValue = $(this).val(); 


      if (reg.test(currentValue)) { 
       $(this).after($error.clone().text("Invalid Input.Try Again.")); 
       $(".error:hidden").fadeIn("slow"); 
       hasError = true; 
       return false; 
      } 

      } 
     /////////////////////////////////////////////////////////////////////////// 

Ancora nessuna fortuna,

anche qui è il mio html:

<div> 
    <input class="formInput" name="First Name" pattern="^[A-Za-z_-][A-Za-z0-9_-]*$" type="text" id="frmFirst" min="2" maxlength="30" required="required"/> 
    <span>First Name</span> 
</div> 

risposta

21

espressione Normalmente regolare con javascript/jquery maniglia come

var reg = /pattern/; 
if (reg.test($(this).val())) { 
    // perform some task 
} 
+0

Sembra essere la stessa cosa che il mio codice già fa. eccetto che il modello è passato da una variabile – user1265533

+0

sì sembra uguale, per le espressioni regolari è necessario racchiudere il modello all'interno di/[pattern]/e.g/test/per l'abbinamento con il test del valore. – irfanmcsd

0

Una stringa non è un oggetto RegExp. Si potrebbe usare qualcosa come:

var reg = new RegExp($(this).attr("pattern")); 
+0

ancora senza fortuna .. – user1265533

4

Come già detto da altri è necessario utilizzare un oggetto al posto della stringa restituita dal metodo jQuery attr(). Puoi vedere la differenza tra i due qui.

Will return "string":

var reg = $(this).attr("pattern"); 
console.log(typeof reg) 

tornerà con "oggetto":

var reg = new RegExp($(this).attr("pattern")); 
console.log(typeof reg); 

Quindi, se si sostituisce:

var reg = $(this).attr("pattern"); 

Con:

var reg = new RegExp($(this).attr("pattern")); 

Il Uncaught TypeError: Object a-zA-Z non ha un metodo 'test' errore scomparirà

... ma la vostra convalida ancora non funziona molto bene. La logica condizionale dice che se il test regex restituisce TRUE quindi gestire un errore:

if (reg.test(currentValue)) { 
    //error handling 
} 

Invece si deve gestire un errore se il test restituisce FALSE:

if (!reg.test(currentValue)) { 
    //error handling 
} 

Questo dovrebbe funzionare per voi.

3

Puoi provare qualcosa di simile. Avverrà "var2 failed".

var var1 = "1"; 
var var2 = "A"; 
var myRegEx = new RegExp('[0-9]+'); //make sure the var is a number 

if (var1 != myRegEx.exec(var1)) { 
    alert("var1 failed"); 
} 

if (var2 != myRegEx.exec(var2)) { 
    alert("var2 failed"); 
} 
0

Di seguito è riportato il modo corretto di convalidare una casella di testo basata su un'espressione regolare che utilizza Jquery in MVC. Si noti che questa espressione è fatta per convalidare più indirizzi e-mail in una stringa:

 var emailReg = new RegExp(/^([A-Z0-9.%+-][email protected]@[A-Z0-9.-]+.[A-Z]{2,6})*([,;][\s]*([A-Z0-9.%+-][email protected]@[A-Z0-9.-]+.[A-Z]{2,6}))*$/i); 
     var emailText = $('#email').val(); 

     if (!emailReg.test(emailText)) { 
      alert('Wrong Email Address\Addresses format! Please reEnter correct format'); 
      return false; 
     } 
    } 
+0

Jquery è la stessa ovunque. Devi solo applicarlo a una casella di testo o campo di input in cui ti piacerebbe convalidare contro questa espressione jquery. –

Problemi correlati