web-dev-qa-db-fra.com

Jquery RegEx Validation

Je veux vérifier si un champ d'entrée a l'attribut "motif" et si c'est le cas, effectuez une vérification regex contre ledit motif. Je sais que cela est déjà fait par HTML5, mais je veux gérer l'événement moi-même. Je reçois cette erreur: Uncaught TypeError: l'objet a-zA-Z n'a pas de méthode 'test'

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

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

Toujours pas de chance,

aussi voici mon 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>
10
user1265533

Expression normale avec le javascript/jquery handle comme

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

Comme déjà mentionné par d'autres, vous devez utiliser un objet à la place de la chaîne renvoyée par la méthode jQuery attr (). Vous pouvez voir la différence entre les deux ici. 

Retournera "chaîne":

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

Reviendra avec "objet":

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

Donc si vous remplacez:

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

Avec:

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

Le Uncaught TypeError: L'objet a-zA-Z n'a pas de méthode 'test' l'erreur disparaîtra 

... mais votre validation ne fonctionnera toujours pas très bien. Votre logique conditionnelle indique si le test de l'expression rationnelle renvoie TRUE, puis corrigez une erreur:

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

Au lieu de cela, il devrait gérer une erreur si le test renvoie FALSE:

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

Cela devrait fonctionner pour vous.

4
deezy

Vous pouvez essayer quelque chose comme ça. Il va alerter "échec de var2".

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");
}
3
rrtx2000

Vous trouverez ci-dessous la méthode appropriée pour valider une zone de texte basée sur une expression régulière utilisant Jquery dans MVC. Veuillez noter que cette expression est faite pour valider plusieurs adresses électroniques en une chaîne:

      var emailReg = new RegExp(/^([A-Z0-9.%+-]+@@[A-Z0-9.-]+.[A-Z]{2,6})*([,;][\s]*([A-Z0-9.%+-]+@@[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
Qasim Bataineh

Une chaîne n'est pas un objet RegExp. Vous pourriez utiliser quelque chose comme:

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