2010-06-12 7 views
5

¿Es posible pasar una variable a una cadena de patrón de expresión regular en jquery (o javascript)? Por ejemplo, quiero validar un campo de entrada de código postal cada vez que el usuario escriba un carácter pasando la variable i al patrón de expresión regular. ¿Cómo hacerlo bien?Pasar variable a cadena de patrón de expresión regular en jquery

$('#zip').keyup(function(){ 
var i=$('#zip').val().length 
for (i; i<=5; i++){ 
      var pattern=/^[0-9]{i}$/; 
    if (!pattern.test( $('#zip').val() ) ) 
       {$('#zip_error').css('display','inline');} 
    else 
     {$('#zip_error').css('display','none');} 
    } 
}) 

Respuesta

10

Sí, se puede, usando la RegExp constructor:

var pattern = new RegExp("^[0-9]{"+i+"}$"); 

... Pero mirando el código parece que usted quiere asegurarse de que el cuadro de texto contiene sólo números , para eso se puede usar una expresión regular simple como esta:

var pattern = /^[0-9]+$/; 

El patrón anterior solo coincidirá con una cadena compuesta por números, buscará :

  • principio de una línea ^
  • de ajuste de un solo carácter dígitos [0-9]
    • Entre uno y número ilimitado de veces +
  • Fin de línea $
+0

sí, el signo '+' es lo que necesito – Philip007

5

Para responder tu que stion, se utiliza el constructor Regexp de modo que usted puede utilizar una cadena para el patrón:

var pattern = new Regexp("^[0-9]{" + i + "}$"); 

Sin embargo, el código no tiene mucho sentido. A medida que cambia el estilo en cada iteración en el ciclo, solo se mostrará el resultado de la última iteración.

Si desea comprobar que el valor sólo contiene cifras y es al menos cinco caracteres, sólo se puede especificar que en el patrón:

$('#zip').keyup(function(){ 
    $('#zip_error').css(
    'display', 
    /^\d{5,}$/.test($('#zip').val()) ? 'none' : 'inline' 
); 
}) 

contenido Expresión regular:

^ = start of string 
\d = same as [0-9] 
{5,} = repeat five or more times 
$ = end of string 
+0

Podría explicar cuál es el significado de los dos '+'? – Philip007

+0

Quiero validar la entrada zip en cada evento keyup, no después de haber ingresado todos los caracteres. – Philip007

+0

esto hará eso, phil –

0
$('#zip').keyup(function(){ 
    var zip= $('#zip').val(); 
    var pattern = /^[0-9]+$/; 
    if (zip.length >0 && zip.match(pattern)) { 
       // write your code 
       return true; 
      } 
      else { 
       // write your code 
       return false; 
      } 
    }); 
0

Su bucle for parece sospechoso:

var i = $ ('# zip'). Val(). Length; para (i; i < = 5; i ++) {

}

¿Por qué se inicia después del final de la cadena?

no hacer lo que desea esto ?:

$('#zip').keyup(function() { 
    var pattern = /^[0-9]*$/; 
    if(!pattern.test($('#zip').val())) 
     $('#zip_error').css('display','inline'); 
    else 
     $('#zip_error').css('display','none'); 
}) 
Cuestiones relacionadas