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() %>
<% }); %>
¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top