2016年12月6日火曜日

[ASP.NET]RegularExpressionValidatorやCompareValidatorを使って日付のチェックを行う。

Validatorシリーズを使って
日付のエラーチェックをする方法です。




イメージはこんな感じ。





①存在する日付をチェックするにはCompareValidator を使います。

<asp:TextBox runat="server" ID="txtNyukoHi" TextMode="Date" Width="150px" CssClass="form-control" />
<asp:CompareValidator runat="server" ControlToValidate ="txtNyukoHi" Type="Date" 
 ValueToCompare="2999/12/31" Operator="LessThan"
    CssClass="text-danger" Display="Dynamic" ErrorMessage="存在しない日付です" />


②これだけだと、MM/DD/YYYYとかでもOKになってしまうみたいです。
  ということで、RegularExpressionValidatorを追加します。


<asp:TextBox runat="server" ID="txtNyukoHi" TextMode="Date" Width="150px" CssClass="form-control" />
<asp:RegularExpressionValidator runat="server" ControlToValidate="txtNyukoHi" 
ValidationExpression="(19|20|21)\d{2}/(0?[1-9]|1[0-2])/(0?[1-9]$|[1-2][0-9]$|3[0-1]$)"
 CssClass="text-danger" Display="Dynamic"  ErrorMessage="[年/月/日]ではありません<br/>" />
<asp:CompareValidator runat="server" ControlToValidate ="txtNyukoHi" Type="Date" 
 ValueToCompare="2999/12/31" Operator="LessThan"
  CssClass="text-danger" Display="Dynamic" ErrorMessage="存在しない日付です" />







追記:ただしこれだと、[年/月/日]ではない場合、2つエラーが表示されるんですよね…





なので、RegularExpressionValidatorはゆるーくチェックをするだけでもいいかなと思っています。
正規表現をゆるくしました。ガチガチにしたい方は上記の正規表現がいいかなと思います。

<asp:TextBox runat="server" ID="txtNyukoHi" TextMode="Date" Width="150px" CssClass="form-control" />
<asp:RegularExpressionValidator runat="server" ControlToValidate="txtNyukoHi" 
ValidationExpression="\d{4}/\d{1,2}/\d{1,2}$"
 CssClass="text-danger" Display="Dynamic"  ErrorMessage="[年/月/日]ではありません<br/>" />
<asp:CompareValidator runat="server" ControlToValidate ="txtNyukoHi" Type="Date"  
 ValueToCompare="2999/12/31" Operator="LessThan"
 CssClass="text-danger" Display="Dynamic" ErrorMessage="存在しない日付です" />


もうちょっと正規表現緩くした方がいいかな…