Rubrik: Datum/Zeit und Timer · Datums- und Zeit-Funktionen | VB-Versionen: VB.NET | 27.08.08 |
Test auf Datumsplausibilität mit Regulärem Ausdruck Mit dieser Prüffunktion ist eine flexible Datumsangabe möglich. | ||
Autor: Klaus Leuthold | Bewertung: | Views: 11.757 |
www.hwk-dresden.de | System: Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Mit dieser Prüffunktion ist eine flexible Datumsangabe möglich. So wird für den aktuellen Tag nur ein Leerzeichen verwendet. Wird ein Tag im aktuellen Monat benötigt gibt man nur diesen Tag an, bei Tag und Monat verfährt man entsprechend. Auch ist die Verwendung eines Punktes bzw. anderen Datumstrennzeichen nicht erforderlich kann aber erfolgen. Die Grobüberprüfung erfolgt über einen Regulären Ausdruck, die schlussendliche Prüfung dann durch "IsDate". Der Reguläre Ausdruck verhindert mehrere IF bzw. CASE - Anweisungen zur entsprechenden Aufsplittung des Strings. Um Reguläre Ausdrücke verwenden zu können muss der entsprechende Namespace importiert werden.
Imports System.Text.RegularExpressions
''' <summary> ''' Prüft Zeichenkette mittels Regulären Ausdruck auf Korrekte Datumsangabe ''' und gibt das Datum im aktuellen Datumsformat zurück. ''' Dabei wird folgende Funktionalität unterstützt: ''' - Verwendung verschiedener Datumstrennzeichen . / - oder ohne ''' Trennzeichen als fortlaufende Zahlenkette ''' - Angabe eines Leerzeichens für das Tagesdatum ''' - Angabe des Tages - z. B. 15 Monat und Jahr werden automatisch ''' entsprechend aktuellem Monat + Jahr ergänzt also im ''' August 2008 zu 15.08.2008 ''' - Angabe Tag + Monat - z. B. 1509 oder 15.09 oder 15-09 oder 15/09 ''' wird zu 15.08.aktuellesJahr ''' - Angabe tag + Monat + Jahr z.B. 020509 oder 02.05.09 oder 02-05-09 usw. ''' wird zu 02.05.2009 ''' Durch den Regex - Ausdrucks ist die Prüfung auf einen gültigen String bei ''' oben angegebener Funktionalität ohne endlose IF oder CASE - Anweisungen ''' möglich. ''' Bei einem Fehlerhaften String wird ein Leerstring zurückgegeben. ''' </summary> ''' <param name="Zeikette">zu prüfender String</param> ''' <returns>gültiges Datum oder im Fehlerfall Leerstring</returns> Public Function GetDatum(ByVal Zeikette As String) As String Dim Jahr As String = DateTime.Now.Year Dim Monat As String = DateTime.Now.Month If Zeikette = " " Then Return Format(DateTime.Now, "d") Else Dim r As New Regex("(?<Tag>3[01]|[012]?[0-9])([./-])?" & _ "(?<Monat>1[012]|0[0-9])?([./-])?(?<Jahr>(19|20)?\d{2}|\d{2})?") Dim m As Match = r.Match(Zeikette) If m.Success AndAlso Len(Zeikette) = (m.Groups("Tag").Length + _ m.Groups("Monat").Length + m.Groups("Jahr").Length) AndAlso Not _ (m.Groups("Monat").Value = "" And m.Groups("Jahr").Value <> "") Then Monat = IIf(m.Groups("Monat").Value = "", Monat, m.Groups("Monat").Value) Jahr = IIf(m.Groups("Jahr").Value = "", Jahr, m.Groups("Jahr").Value) Zeikette = String.Format("{0}.{1}.{2}", m.Groups("Tag").Value, Monat, Jahr) End If End If If IsDate(Zeikette) Then Return Format(CType(Zeikette, DateTime), "d") Else Return "" End If End Function