2

xValを使用してasp.netMVC1.0でフォームを検証しています

正規表現が正しく検証されない理由がわかりません。

  • 空の値では検証されませ
  • 「1」、「12」、「123」、または「1234」の値では検証されませ
  • 「12345」の値で検証します
  • 「12345」の値で検証します
  • 「12345-」の値で検証します
  • 「12345-1」の値で検証します
  • 「12345-12」の値で検証します...など

郵便番号の場合、次の2つのパターンのいずれかを期待します。

12345また12345 -1234

これが私が試した2つの正規表現です:

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

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

これが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; }
   }
}

これが私の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() %>
<% }); %>
4

2 に答える 2

2

開始アンカーと終了アンカーがありません。

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

これらがないと、部分的なマッチングが可能になります。正規表現は文字列12345 -1\d{5}:で照合し、検証します。12345-1

于 2010-03-30T22:09:33.367 に答える
1

入力フィールドにマスクプラグインを使用していることについては言及しませんでした。マスクプラグインはここにあります。

したがって、テキストボックスで、最初の5桁だけを入力してから、次のフィールドにタブで移動すると、使用したマスクプラグインが原因でfalseとして検証されます。マスクプラグインは、空の可能性のためにアンダースコア文字を挿入します。たとえば、次のようになります。

_____ -____フォーカスのある空のフィールドに配置するマスクになります。最初の5桁を入力すると、次のようになります。

12345 -____

次に、タブで次のフィールドに移動すると、-____は削除されますが、入力フィールドをオンブラーで再検証する必要があります。

だから私がしたことは、ぼかしの入力フィールドを再検証することでした、そして今それは機能します。

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

この正規表現を使用します^\d{5}( -\d{4})?$

于 2010-03-31T13:33:00.527 に答える