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>
Expression normale avec le javascript/jquery handle comme
var reg = /pattern/;
if (reg.test($(this).val())) {
// perform some task
}
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.
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");
}
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;
}
}
Une chaîne n'est pas un objet RegExp
. Vous pourriez utiliser quelque chose comme:
var reg = new RegExp($(this).attr("pattern"));