作ったもの
有効な日付かどうかを判定するものをつくりました。
計算ステージでIsDate関数を使ったら、区切り文字がないものが入ってきたときに判定してもらえなかったので。
- 年は2文字もしくは4文字
- 区切り文字がある場合は月と日は1文字でもオッケー
- 区切り文字は無しもしくは「/」「-」「.」のいずれか
上記条件を満たすときのみカレンダーに存在する日付かどうかを見ます。
それ以外のフォーマットは全部日付じゃないとします。(なので2019.1とか6/12とかはダメです)
yyyyMMdd yyyy/MM/dd yyyy-MM-dd yyyy.MM.dd
yyMMdd yy/MM/dd yy-MM-dd yy.MM.dd
作りかた
コードステージに以下のように書きます。
入力:InDate(型はText) 半角でお願いします
出力:IsDate(型はFlag)
DateTime tmp;
if (System.Text.RegularExpressions.Regex.IsMatch(InDate,
@"^(?<year>[0-9]{4}|[0-9]{2})(?<datesep>\/|-|\.|)" +
@"(?<month>0?[1-9]|1[012])\k<datesep>" +
@"(?<day>0?[1-9]|[12][0-9]|3[01])$"))
{
if (InDate.IndexOf("/") < 0 && InDate.IndexOf("-") < 0 && InDate.IndexOf(".") < 0)
{
if(InDate.Length == 8)
InDate = InDate.Substring( 0, 4 ) + "/" + InDate.Substring( 4, 2 ) + "/" + InDate.Substring( 6, 2 );
else if(InDate.Length == 6)
InDate = InDate.Substring( 0, 2 ) + "/" + InDate.Substring( 2, 2 ) + "/" + InDate.Substring( 4, 2 );
}
IsDate = DateTime.TryParse(InDate, out tmp);
}
else
{
IsDate = false;
}
終わりです
c#とか読んだことも書いたこともなく……
とりあえず見よう見まねで書いて、動いたからたぶんこれで合ってるのかなーというレベルです。
違うところとかがあったら教えてください。ありがとうございます。