2010-06-12 7 views
5

Ist es möglich, Variable in regulären Ausdruck Muster Zeichenfolge in jquery (oder Javascript) übergeben? Ich möchte zum Beispiel jedes Mal, wenn ein Benutzer ein Zeichen eingibt, ein Eingabefeld für die Postleitzahl validieren, indem ich die Variable i an das Muster für reguläre Ausdrücke übergebe. Wie geht es richtig?Variable an regulären Ausdruck übergeben Muster Zeichenfolge in 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');} 
    } 
}) 

Antwort

10

Ja, Sie können mit Hilfe der RegExp Konstruktor:

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

Aber ... in Ihrem Code suchen scheint, dass Sie sicherstellen möchten, dass die Textbox enthält nur Zahlen, für die Sie kann eine einfache Regex wie folgt verwenden:

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

Das obige Muster wird durch Zahlen zusammengesetzt nur einen String übereinstimmen, wird es sucht :

  • Beginn einer Antwort [0-9]
    • Zwischen einem und unbegrenzten Zeiten +
  • Zeilenende eines einstelliges Zeichen ^
  • Spiel Linie $
+0

ja, das ‚+‘ Zeichen ist das, was ich brauche – Philip007

5

zu deine Frage lierte, verwenden Sie den Regexp Konstruktor, so dass Sie eine Zeichenfolge für das Muster verwenden:

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

Allerdings ist der Code nicht wirklich Sinn machen. Wenn Sie den Stil in jeder Iteration in der Schleife ändern, wird nur das Ergebnis der letzten Iteration angezeigt.

Wenn Sie überprüfen wollen, dass der Wert nur Ziffern enthält und mindestens fünf Zeichen, können Sie einfach festlegen, dass im Muster:

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

Regulärer Ausdruck Inhalt:

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

Könnten Sie erklären, was ist der Sinn der beiden ‚+‘? – Philip007

+0

Ich möchte die zip-Eingabe bei jedem keyup-Ereignis validieren, nicht nachdem alle Zeichen eingegeben wurden. – Philip007

+0

das wird das tun, 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

Ihre for-Schleife sieht eher verdächtig aus:

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

}

Warum Sie nach dem Ende der Zeichenfolge soll man anfangen?

Sie nicht nur wollen, dass diese ?:

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