Pergunta

Estou usando o XVAL para validar meus formulários no ASP.NET MVC 1.0

Não sei por que minha expressão regular não está validando corretamente.

  • Isso faz NÃO validar com um valor vazio
  • Isso faz NÃO Valide com o valor de "1", "12", "123" ou "1234"
  • Valida com o valor de "12345"
  • Valida com o valor de "12345"
  • Valida com o valor de "12345 -"
  • Valida com o valor de "12345 -1"
  • Valida com o valor de "12345 -12" ... etc

Para um código postal, espero um dos dois padrões:

12345 ou 12345 -1234

Aqui estão os dois regex que tentei:

(\d{5})((( -)(\d{4}))?)

(\d{5})|(\d{5} -\d{4})

Aqui está minha aula de metadados 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; }
   }
}

Aqui está minha 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() %>
<% }); %>
Foi útil?

Solução 2

Não mencionei que estava usando um plug -in de máscara para o meu campo de entrada. O plugin de máscara pode ser encontrado aqui.

Portanto, na caixa de texto, se eu preencher apenas os primeiros 5 dígitos e, em seguida, a guia para o próximo campo é validada como falsa devido ao plug -in de máscara que usei. O plug -in de máscara, coloca um caractere sublinhado para possíveis possibilidades vazias .... por exemplo:

_____ -____ Seria a máscara que colocaria no campo vazio em foco. Se eu preencher os 5 primeiros dígitos que teria:

12345 -____

Então, se eu guiar para o próximo campo, o -____ é removido, mas o campo de entrada precisa ser re-validado noblur.

Então, o que eu fiz foi validar o campo de entrada no Blur e agora ele funciona.

$('#Zip').blur(function() {
        $(this).validate();
});

Eu uso este regex ^\d{5}( -\d{4})?$

Outras dicas

Você está perdendo as âncoras de início e final:

^\d{5}( -\d{4})?$

Sem isso, você permite a correspondência parcial. O regex corresponde à string 12345 -1 por \d{5}: 12345-1, e valida.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top