xVal et Expression régulière
Question
J'utilise xVal pour valider mes formulaires dans asp.net MVC 1.0
Je ne sais pas pourquoi mon expression régulière ne valide pas correctement.
- Finalité pas valider avec une valeur vide
- Finalité pas valider avec la valeur de "1", "12", "123" ou "1234"
- Il valide la valeur de "12345"
- Il valide la valeur de "12345"
- Il valide la valeur de "12345 -"
- Il valide la valeur de "-1 12345"
- Il valide la valeur de "12345 -12" ... etc
Pour un code postal J'attends un des deux motifs:
12345
ou 12345 -1234
Voici les deux regex j'ai essayé:
(\d{5})((( -)(\d{4}))?)
(\d{5})|(\d{5} -\d{4})
Voici ma classe pour MetaData xVal
[MetadataType(typeof(TIDProfileMetadata))]
public class TIDProfileStep
{
public class TIDProfileMetadata
{
[Required(ErrorMessage = " [Required] ")]
[RegularExpression(@"(\d{5})|(\d{5} -\d{4})", ErrorMessage = " Invalid Zip ")]
public string Zip { get; set; }
}
}
Voici ma page ASPX:
<% Html.BeginForm("Edit", "Profile", FormMethod.Post); %>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<h6>Zip:</h6>
</td>
<td>
<%= Html.TextBox("Profile.Zip")%>
</td>
</tr>
<tr>
<td>
<input type="submit"/>
</td>
</tr>
</table>
<% Html.EndForm(); %>
<% Html.Telerik().ScriptRegistrar()
.OnDocumentReady(() =>
{ %>
<%= Html.ClientSideValidation<TIDProfileStep>("Profile").SuppressScriptTags() %>
<% }); %>
La solution 2
Je ne mentionnais pas que je travaillais avec un plugin masque pour mon champ de saisie. Le plugin masque peut être trouvé .
Ainsi, sur la zone de texte si je devais remplir seulement les 5 premiers chiffres, puis onglet dans le champ suivant est validerait comme faux en raison du plugin masque que je l'ai utilisé. Le plugin masque, met dans un caractère underscore pour possiblities vides .... Ainsi, par exemple:
_____ -____
serait le masque qu'il mettrait dans le champ vide sur le focus. Si je remplis les 5 premiers chiffres que j'aurais:
12345 -____
Ensuite, si l'onglet I du champ suivant, le -____
est supprimé, mais le champ de saisie doit être onblur revalidé.
Alors, ce que je faisais était revalider le champ de saisie sur le flou et maintenant il fonctionne.
$('#Zip').blur(function() {
$(this).validate();
});
J'utilise cette ^\d{5}( -\d{4})?$
regex
Autres conseils
Vous manque les points d'ancrage de début et de fin:
^\d{5}( -\d{4})?$
Sans ces éléments vous permettent une correspondance partielle. Le regex correspond à la 12345 -1
chaîne par \d{5}
:. 12345
-1
et validation