2010-07-03 6 views
1

Comment voulez-vous valider 2 expressions régulières différentes dans jQuery ou JS?jQuery/Javascript - Validation multiple de RegEx

code Mon JS:

function validate(){ 
    var MyField = document.getElementById('MyField'); 
    if (MyField.value == null || !MyField.value.toString().match(/^(\d{3})-?\d{2}-?\d{4}$/) || !MyField.value.toString().match(/^(\d{2})-?\d{7}$/)); 
    alert('Ivalid Entry ...'); 
    return false; 
} 

Mon HTML:

<form action=""> 
    <input id="MyFIeld" name="MyField" type="text" /> 
    <input type="submit" value="Submit" onClick="validate();" /> 
</form> 

Fondamentalement, son numéro d'identification fiscale pour et le formatage correctement SSN. ## - ####### ou ### - ## - #### ... Je suis ouvert aux solutions JS ou jQuery ... tout aide grandement apprécié.

+0

Si vous avez du mal à cela, vous pouvez l'utiliser, http://digitalbush.com/projects/masked-input-plugin/ – Reigel

+0

Je suggérerais de filtrer tout sauf les caractères valides (par exemple les nombres) . De cette façon, peu importe si l'utilisateur utilise des tirets, des espaces ou autres comme séparateurs. Vous pouvez ensuite comparer si le champ a suffisamment de chiffres ou tout autre caractère requis. –

+1

et tout ce que vous validez côté client, n'oubliez pas de valider également côté serveur ... – Reigel

Répondre

3

Ce que je fais normalement dans des cas comme ça est d'avoir une « bibliothèque » de tests regex:

var regexTest = function() { 
    this.TaxId = /^(\d{2})-?\d{7}$/; 
    this.SSN = /^(\d{3})-?\d{2}-?\d{4}$/; 
} 

Cela sépare votre regex au cas où il doit être changé pour une raison quelconque. Croyez-moi, cela arrivera de temps en temps. (Peut-être pas SSN/TaxId, mais il est une bonne pratique)

Puis-je configurer un bloc d'événement semblable à ce que vous avez (jQuery, il est facile) pour fournir une rétroaction instantanée:

$("#MyField").bind("blur keyup", 
    function() { 
     var myVal = $(this).val(); // should store $(this) in a var instead 
     if(regexTest.SSN.test(myVal) || regexTest.TaxId.test(myVal)) { 
     $(this).css("background-color", ""); 
     } else { 
     $(this).css("background-color", "#FF0000"); 
     } 
    } 
); 

Je sais que ce n » t validez sur soumettre, mais il fournit des commentaires à l'utilisateur lors de la saisie. (Ce n'est pas vraiment mauvais sur les frais généraux tant que vous gardez votre validation simple.) Puis effectuez la validation de votre côté serveur de données (les gens peuvent contourner les contrôles de validation) et vous devriez être bon. Oui, il ne valide pas les données avant de les soumettre, mais si l'utilisateur voit une boîte rouge, il sait que c'est une mauvaise donnée.

Il existe, bien sûr, des bibliothèques de validation, comme indiqué dans certains commentaires, mais j'aime parfois écrire les miennes. ;)

+0

Egalement lier au formulaire et valider lors de sa soumission. –