ユーザーにDateTime形式の入力を許可するとしますが、それが妥当かどうかを確認するために検証する必要があります。ユーザーは「yyyy-MM-dd」と入力してもかまいませんが、「MM/yyyyMM/ddd」または他の任意の組み合わせを入力することもできます。これを検証する方法はありますか?
入力したフォーマットを実際に検証する方法はわかりませんが、何かに変換される文字を意図的に含めたい場合があるためです。あなたが考慮すべきかもしれないことの1つは、ユーザーが入力したフォーマットの変換先のプレビューを表示することにより、ユーザーが自己検証できるようにすることです。
このようなものをお探しですか?
DateTime expectedDate;
if (!DateTime.TryParse("07/27/2012", out expectedDate))
{
Console.Write("Luke I am not your datetime.... NOOO!!!!!!!!!!!!!!");
}
ユーザーが必要な正確な形式を知っている場合...
string[] formats = { "MM/dd/yyyy", "M/d/yyyy", "M/dd/yyyy", "MM/d/yyyy" };
DateTime expectedDate;
if (!DateTime.TryParseExact("07/27/2012", formats, new CultureInfo("en-US"),
DateTimeStyles.None, out expectedDate))
{
Console.Write("Thank you Mario, but the DateTime is in another format.");
}
指定したフォーマット文字列が有効かどうかを知りたいと思います...
このため、あなたはそれを往復することができます:
private bool IsValidDateFormat(string dateFormat)
{
try
{
String dts=DateTime.Now.ToString(dateFormat);
DateTime.ParseExact(dts, dateFormat, CultureInfo.InvariantCulture);
return true;
}
catch (Exception)
{
return false;
}
}
私が間違って覚えていない限り、無効なDateTime形式の文字列は1文字だけです。 2文字以上のDateTime形式の文字列が有効であると想定できます。
DateTime.ParseExact("qq", "qq", null) == DateTime.Today
DateTime.ParseExact("myy", "501", null) == "05/01/2001"
参考までに、1つの文字列をフォーマットとして許可:
d,D,f,F,g,G,m,M,o,O,r,R,s,T,u,U,y,Y
q
などの他の文字自体は無効です。他のすべての文字列は、フォーマット文字列として正常に解析されます。
あなたはあなたの検証戦略について話しません。とにかく、正規表現を含むものを使用し、許可されたパターンを適用する必要があります。これは正式な妥当性に反することになります。実際の内容に注意し、値が月、日、年に従って正しいことを確認する必要があります。
とにかく、数人がDateTime.TryParse()メソッドを使用して素材を処理することを提案しました。しかし、とにかくフォーマットを指定する必要があります!だから魔法はありません!そうでなければ、あいまいに陥ります
これは私のために働く
try
{
String formattedDate = DateTime.Now.ToString(dateFormat);
DateTime.Parse(formattedDate);
return true;
}
catch (Exception)
{
return false;
}
私の解決策は、入力フィールドを読み取り専用としてマークし、ユーザーが jqueryui datepicker によってのみ値を変更できるようにすることでした。
直感的です。好みのフォーマットを指定でき、この1つのフォーマットのみを検証する必要があります。