2012-04-06 11 views
9

Ich möchte überprüfen, ob ein Eingabefeld das Attribut "pattern" hat, und wenn ja, einen Regex-Check über das Muster vorgeben. Ich weiß, dass HTML5 schon erledigt hat, aber ich möchte das Ereignis behandeln mich selber. Ich erhalte diese Fehlermeldung: Uncaught Typeerror: Object a-zA-Z hat keine Methode 'test'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; 
      } 

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

noch kein Glück,

auch hier ist mein 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> 

Antwort

21

Normalerweise regulärer Ausdruck mit Javascript/jquery Handle wie

+0

Es scheint das gleiche zu sein, was mein Code bereits tut. außer dass das Muster von einer Variablen – user1265533

+0

übergeben wird, sieht es genauso aus. Für den regulären Ausdruck müssen Sie ein Muster innerhalb von/[Muster]/e.p./Test/zum Vergleichen mit dem Wertentest einschließen. – irfanmcsd

0

Ein String ist kein RegExp Objekt. Sie so etwas wie verwenden:

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

immer noch kein Glück .. – user1265533

4

Wie bereits erwähnt von anderen, die Sie verwenden müssen, um ein Objekt anstelle der Zeichenfolge zurückgegeben von der jQuery attr() -Methode. Sie können den Unterschied zwischen den beiden hier sehen.

Will return "string":

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

Wir kommen wieder mit "Objekt":

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

Also, wenn Sie ersetzen:

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

mit:

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

Die Uncaught Typeerror: Object a-zA-Z keine Methode 'test' Fehler

... aber die Validierung noch nicht sehr gut funktionieren wird verschwinden hat. Ihre bedingte Logik sagt, wenn die Regex Test liefert TRUE, dann einen Fehler behandeln:

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

Stattdessen sollte es einen Fehler behandeln, wenn der Test FALSCH zurückgibt:

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

Dies sollte für Sie arbeiten.

3

Sie können so etwas versuchen. Es wird "var2 failed" gemeldet.

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

Unten ist die richtige Methode zum Validieren einer Textbox basierend auf einem regulären Ausdruck mit JQuery in MVC. Bitte beachten Sie, dass dieser Ausdruck erstellt wurde, um mehrere E-Mail-Adressen in einer Zeichenkette zu validieren:

 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 ist überall gleich. Sie müssen es nur auf ein Textfeld oder ein Eingabefeld anwenden, in dem Sie diesen jQuery-Ausdruck überprüfen möchten. –