0

文字列を検証して、'dd.mm.yyyy HH:mm'四半期ごと:00に日付と一致させたい:15、、、:30:45

12.03.2012 20:00
28.12.2014 20:15
31.09.2012 01:45

この正規表現は私のために働いています

^(0[1-9]|[12][0-9]|3[01]).(0[1-9]|1[012]).((20)\d\d) ([01][0-9]|2[0-4]):([01][05]|[4][5]|[3][0])?$

しかし、これはそれを行うための最良の方法ですか?

それを改善するためにいくつかのアドバイスを与えてください。

@Kobiの後素晴らしい提案

^(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[012])\.((20)[1-9][0-9]) ([01][0-9]|2[0-4]):([03]0|[14]5)?$

ありがとう。

4

1 に答える 1

3

[01][05]|[4][5]|[3][0] 一致する可能性があります、10または05、あなたが探してい[03]0|[14]5ます。

:(...)?で終わる文字列を検証します:。あなたは次のようなものが必要です(:...)?-コロンは括弧の中にあるべきです。

必ずドットをエスケープしてください。エスケープしないでください。そうし\.ない.と、すべての文字に一致します。

これが.netエンジンで終了する場合は、\dすべてのUnicode数字に一致するため、を選択することをお勧めします[0-9]

また、次のコードをお勧めします。これは、はるかに堅牢であることが証明される可能性があります(たとえば、2013年2月29日と2012年2月29日のような日付を無効にします)。

public bool IsValidDateAndHour(string input)
{
    DateTime date;
    bool success = DateTime.TryParseExact(input, "dd.MM.yyyy HH:mm",
                                          CultureInfo.InvariantCulture,
                                          DateTimeStyles.None, out date);
    return success && date.Minute % 15 == 0;
}
于 2013-01-31T22:32:13.680 に答える