XVal y de expresiones regulares
Pregunta
Estoy utilizando XVal para validar mis formas en asp.net MVC 1.0
No sé por qué mi expresión regular no es validar correctamente.
- Se hace no Validar con un valor vacío
- Lo hace NO Validar con el valor de "1", "12", "123", o "1234"
- Se valida con el valor de "12345"
- Se valida con el valor de "12345"
- Se valida con el valor de "12345 -"
- Se valida con el valor de "12345 -1"
- Se valida con el valor de "12345 -12", etc ...
Para obtener un código postal espero que uno de los dos patrones:
12345
o 12345 -1234
Aquí están las dos expresiones regulares Traté:
(\d{5})((( -)(\d{4}))?)
(\d{5})|(\d{5} -\d{4})
Esta es mi clase de Metadatos para 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; }
}
}
Esta es mi página 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() %>
<% }); %>
Solución 2
Me olvidó mencionar que yo estaba usando un plugin máscara para mi campo de entrada. El complemento de la máscara se puede encontrar aquí .
Así que en el cuadro de texto si tuviera que rellenar sólo los primeros 5 dígitos y luego a la pestaña siguiente campo es validaría como falso debido a la máscara de plug-in que he utilizado. El complemento de la máscara, pone en un carácter de subrayado de posibilidades vacías .... Así por ejemplo:
_____ -____
sería la máscara que pondría en el campo vacío en el foco. Si lleno en los 5 primeros dígitos Tendría:
12345 -____
A continuación, si pestaña al siguiente campo, se retira el -____
, pero las necesidades de campo de entrada para ser revalidado onBlur.
Así que lo que hice fue volver a validar el campo de entrada de desenfoque y ahora funciona.
$('#Zip').blur(function() {
$(this).validate();
});
Yo uso esta expresión regular ^\d{5}( -\d{4})?$
Otros consejos
Te estás perdiendo los anclajes de inicio y final:
^\d{5}( -\d{4})?$
Sin esto permite que la concordancia parcial. La expresión coincide con la cadena de 12345 -1
por \d{5}
:. 12345
-1
, y lo valida