【解決方法】asp での年齢制限 (15 歳以上) の日付検証

プログラミングQA


以下のコードは、任意の日付のエラー メッセージを表示します。現在の日付から 15 歳未満のエラー メッセージを表示する必要があります。助けてください

XML
<asp:Label ID="Label2" runat="server" Text="DOB"></asp:Label>
  <asp:TextBox ID="DOB" runat="server"></asp:TextBox>
  <asp:RequiredFieldValidator ID="RFVdob" runat="server" ControlToValidate="DOB" ErrorMessage="Enter Birth Date" Font-Bold="True" ForeColor="Red"></asp:RequiredFieldValidator>
  <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="DOB"    ValidationExpression="^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d$" ErrorMessage="Enter a Valid Date (mm/dd/yyyy)" Font-Bold="True" ForeColor="Red" ></asp:RegularExpressionValidator>

   <asp:RangeValidator ID="RangeValidator1" runat="server" ControlToValidate="DOB"  ErrorMessage="Age above 15 " Type="Date"></asp:RangeValidator>

ページ Lode のコード:

C#
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("hu-HU");
        RangeValidator1.MinimumValue = DateTime.Today.AddYears(-15).ToShortDateString();
        RangeValidator1.MaximumValue = DateTime.Today.ToShortDateString();

解決策 1

18 歳以上であることを確認するために、以前にも同様の要件がありました。

カスタムバリデーターを使用しました(できれば正規表現を避けようとしています)

XML
<asp:CustomValidator ID="cvDOB" runat="server" ControlToValidate="pmDOB"
    ClientValidationFunction="VAge"
    ErrorMessage="Birth Date is under age 18."
    ForeColor="Red">*</asp:CustomValidator>

18 歳以上であることを確認するための JavaScript は次のとおりです。

C#
function VAge(obj, args) {
        //validate that a DOB is at least 18 years old.
        //http://www.codingforums.com/showthread.php?t=171435
        var today = new Date();
        var today_year = today.getFullYear();
        var value = Trim(args.Value);
        value = value.replace("-", "/").replace(".", "/");
        var splitDate = value.split("/");
        var dob_year = splitDate[2];
        var dob_day = splitDate[1];
        var dob_month = splitDate[0];
        var dob;

        dob = new Date(dob_year, dob_month - 1, dob_day); // as months are 0-11
        if ((dob_day == dob.getDate()) && (dob_month == (dob.getMonth() + 1)) && (dob_year == dob.getFullYear())) {
            dob_month = dob_month - 1; // as months are 0-11
            var age = today_year - dob_year;
            var today_month = today.getMonth();
            var today_day = today.getDate();
            if (dob_month > today_month) { age = age - 1 }  // next birthday not yet reached
            else if (dob_month == today_month && today_day < dob_day) { age = age - 1 }  // next birthday not yet reached
            if (age < 18) {
                args.IsValid = false;
                return;
            }
        }
        else {
            args.IsValid = false;
            return;
        }

        args.IsValid = true;
    }

コメント

タイトルとURLをコピーしました