xVal e Corrispondenza espressione regolare
Domanda
Sto usando xVal per convalidare le mie forme in asp.net MVC 1.0
Non capisco perché la mia espressione regolare non sta convalidando correttamente.
- Lo fa non convalidare con un valore vuoto
- Lo fa non confermare con il valore di "1", "12", "123" o "1234"
- Si convalida con il valore di "12345"
- Si convalida con il valore di "12345"
- Si convalida con il valore di "12345 -"
- Si convalida con il valore di "-1 12345"
- Si convalida con il valore di "12345 -12" ... etc
Per un codice postale mi aspetto uno dei due modelli:
12345
o 12345 -1234
Ecco i due regex ho provato:
(\d{5})((( -)(\d{4}))?)
(\d{5})|(\d{5} -\d{4})
Ecco la mia classe di metadati per 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; }
}
}
Qui è la mia pagina 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() %>
<% }); %>
Soluzione 2
non sono riuscito a dire che stavo usando un plugin maschera per il mio campo di input. Il plugin maschera può essere trovato qui .
Quindi, nella casella di testo se dovessi compilare solo le prime 5 cifre e quindi scheda al campo successivo è convaliderebbe come falso a causa del plug-in maschera che ho usato. Il plugin maschera, mette in un carattere di sottolineatura per possiblities vuoti .... Così, per esempio:
_____ -____
sarebbe la maschera che metterebbe nel campo vuoto sul fuoco. Se riempio nelle prime 5 cifre avrei:
12345 -____
Quindi se scheda al campo successivo, il -____
viene rimosso, ma il campo di ingresso deve essere onblur nuovamente convalidato.
Quindi quello che ho fatto è stato ri-convalidare il campo di input sulla sfocatura e ora funziona.
$('#Zip').blur(function() {
$(this).validate();
});
Io uso questa espressione regolare ^\d{5}( -\d{4})?$
Altri suggerimenti
Ti manca le ancore di inizio e fine:
^\d{5}( -\d{4})?$
Senza questi si consente corrispondenza parziale. La regex corrisponde al 12345 -1
stringa \d{5}
:. 12345
-1
, e lo convalida