regex Stunde: Minute (Stunde> 24)
Frage
Ich mag validate und Auszug Stunden und Minuten aus einem String mit Regex in .NET.
Nur um die beiden Zahlen, getrennt (oder nicht) von :
zu erholen. akzeptiert Format
h:m
oder m
. Unaccepted :m
, h:
.
EDIT: Dies ist zu beachten, dass die Anzahl der Stunden , um die 23 bis ... Überlauf könnte 32 .
Der Überlauf für Stunden (über 32) und Minuten (über 59) I nach Werten Erholung (int.Parse) tun wird,
* nur zum Spaß vielleicht gibt aa relativ einfache regex, die auch die> 32 Stunden filtern konnten und> 59 für Minute (für Minuten es könnte sein, [0-5]*[0-9]
, stundenlang ich weiß nicht)?
Lösung 4
Schließlich wird der Code (bis 32) für die Validierung und auch Werte zu erhalten ist (vb.net-Version):
Dim regexHour As New Regex( _
"((?<hours>([012]?\d)|(3[01]))\:)?(?<minutes>[0-5]?\d)", _
RegexOptions.ExplicitCapture)
Dim matches As MatchCollection = regexHour.Matches(value)
If matches.Count = 1 Then
With matches(0)
' (!) The first group is always the expression itself. '
If .Groups.Count = 3 Then ' hours : minutes '
strHours = .Groups("hours").Value
If String.IsNullOrEmpty(strHours) Then strHours = "0"
strMinutes = .Groups("minutes").Value
Else ' there are 1, 3 or > 3 groups '
success = False
End If
End With
Else
success = False
End If
Vielen Dank alle zu dieser Antwort beitragen!
Andere Tipps
Sind Sie tot auf einem regulären Ausdruck gesetzt? Da DateTime.Parse
wäre viel einfacher und leistungsstärker hier.
DateTime dt = DateTime.Parse("12:30 AM");
Dann dt gibt Ihnen alles, was Sie brauchen, um über die Zeit wissen. DateTime.TryParse()
kann besser sein, falls Sie weniger sicher, es ist ein Zeit-String.
(?:(\d\d?):)?([0-5][0-9])
Wenn Sie Stunden überprüfen:
(?:([01]?[0-9]|2[0-3]):)?([0-5][0-9])
Bearbeiten :. Getestet und korrigiert
Allerdings ist der beste Weg, dies zu tun, ist mit DateTime.ParseExact
, wie folgt aus: (Geprüft)
TimeSpan time = DateTime.ParseExact(
input,
new string[] { "HH:mm", "H:mm", "mm", "%m" }, //The % is necessary to prevent it from being interpreted as a single-character standard format.
CultureInfo.InvariantCulture, DateTimeStyles.None
).TimeOfDay;
Für die Validierung, können Sie TryParseExact .
Hier ist der Regex-String. Sie können den Namen Einfanggruppen „Stunden“ und „Minuten“ zugreifen. Nutty "ExplicitCapture" und "Einlinige".
@ "^ (? (
Sie können reguläre Ausdrücke testen hier: http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx
Wie bereits erwähnt, könnte ein Datetime-Parse-Anruf besser sein, es sei denn Sie müssen bestätigen, dass nur diese Form erlaubt.
Auch negative Werte sind nicht zulässig, weder sind Dezimalzahlen. (Aber kann die Regex geändert werden, um sie zu schließen, wenn erforderlich).