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() %>
<% }); %>
È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top