DD/MM/YYYY
入力したテキストボックスの日付がフォーマットされていることを確認または検証する方法は?
8 に答える
マークアップ:
<asp:Textbox runat="server" ID="TextBox1" />
<asp:CustomValidator runat="server" ControlToValidate="TextBox1" ErrorMessage="Date was in incorrect format" OnServerValidate="CustomValidator1_ServerValidate" />
コードビハインド:
protected void CustomValidator1_ServerValidate(object sender, ServerValidateEventArgs e)
{
DateTime d;
e.IsValid = DateTime.TryParseExact(e.Value, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out d);
}
複数のフォーマットを許可し、それらのみを許可する場合は、次を使用します。
DateTime.TryParseExact(e.Value, new[] { "dd/MM/yyyy", "yyyy-MM-dd" }, CultureInfo.InvarinatCulture, DateTimeStyles.None, out d);
別のオプションは、正規表現バリデーターを使用することです。以下の正規表現はDD/MM / YYYYをチェックしますが、もちろん、01のようなものがDDであるかMMであるかを区別する方法はありません。そうでなければ、それはトリックを行います。
<asp:TextBox ID="txtDate" runat="server"/>
<asp:RegularExpressionValidator ID="regexpName" runat="server"
ErrorMessage="This expression does not validate."
ControlToValidate="txtDate"
ValidationExpression="^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$" />
DateTime Result;
DateTimeFormatInfo info = new DateTimeFormatInfo ( );
CultureInfo culture;
culture = CultureInfo.CreateSpecificCulture ( "en-US" );
info.ShortDatePattern = "dd/MM/yyyy";
if ( DateTime.TryParse ( StrDate, info, DateTimeStyles.None, out Result ) )
{
return StrDate;
}
CustomValidatorを使用して、入力した値が設定されたパラメーター内にあることを確認できます。
つまり、2001年12月13日は有効ですが、2001年12月13日は無効です。
カスタムバリデーターを使用してテキストボックス内のほぼすべてをチェックできますが、 CompareValidatorを使用してテキストを日付に変換できるかどうかをチェックする方が簡単な場合があります。
私はここで例を見つけました(VBで、しかしC#に読んで翻訳するのに十分簡単です):http://quickstarts.asp.net/QuickStartv20/aspnet/doc/validation/default.aspx
ただし、ある種の日付ピッカーコントロールを使用すると、よりユーザーフレンドリーになる場合があります。
カレンダーコントロールを使用することをお勧めしますが、とにかく日付文字列を確認する場合は、次のコードを使用して、がDD / MM/YYYY形式であることを検証できます。
DateTime dt;
if (!DateTime.TryParse(texbox.Text, new System.Globalization.CultureInfo("en-GB"), System.Globalization.DateTimeStyles.None, dt))
{
// text is not in the correct format
}
私のアプローチは、クライアント側の最初のクイックテスト(「日付のように見えるか」)にregexvalidatorを使用することです。次に、「2010年2月29日」のような日付を除外するために、私の形式でDateTime.Parseを実行しようとするサーバーサイドイベントを持つCustomValidator。
個人的には、ここでCompareValidatorを信頼していません。これは、CompareValidatorがどの形式を使用しているかわからないためです(ただし、十分に調査しなかったためである可能性があります)。
できません。代わりに、ある種の日時ピッカーを使用してください。ここの例。