2012-04-06 18 views
9

Quiero comprobar si un campo de entrada tiene el atributo "patrón" y si es así, preformar una comprobación de expresiones regulares en dicho patrón. Sé que esto ya lo hace HTML5, pero quiero manejar el evento mí mismo. Estoy recibiendo este error: TypeError no detectada: El objeto a-zA-Z no tiene un método de 'prueba'Jquery RegEx Validation

///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; 
      } 

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

Todavía no hay suerte,

También aquí está mi 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> 

Respuesta

21

Expresión normalmente regular con javascript/jquery como

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

Parece ser lo mismo que mi código ya hace. excepto que el patrón se pasa desde una variabel – user1265533

+0

sí, tiene el mismo aspecto, para la expresión regular necesita encerrar el patrón dentro de/[patrón]/e.g/test/para que coincida con la prueba de valor. – irfanmcsd

0

Una cadena no es un objeto RegExp. Se podría utilizar algo como:

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

todavía no hay suerte. – user1265533

4

Como ya se ha mencionado por otros que necesita para utilizar un objeto en lugar de la cadena devuelta por el método jQuery attr(). Puedes ver la diferencia entre los dos aquí.

Volveremos "cadena":

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

volverá con "objeto":

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

Así que si se reemplaza:

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

Con:

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

El TypeError no detectada: El objeto a-zA-Z no tiene ninguna 'prueba' método error desaparecerá

... pero su validación todavía no va a funcionar muy bien. Su lógica condicional dice que si la prueba de expresión regular devuelve TRUE entonces manejar un error:

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

sino que debe manejar un error si la prueba devuelve FALSO:

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

Esto debería funcionar para usted.

3

Puede intentar algo como esto. Se alertará que "var2 falló".

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

A continuación se muestra la forma correcta de validar un cuadro de texto basado en una expresión regular utilizando Jquery en MVC. Tenga en cuenta que esta expresión está hecha para validar varias direcciones de correo electrónico en una cadena:

 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 es el mismo en cualquier lugar. Solo tiene que aplicarlo a un cuadro de texto o campo de entrada donde quiera validar contra esta expresión jquery. –

Cuestiones relacionadas