regex heure: minute (heure> 24)
Question
Je voudrais Valider et Extrait les heures et minutes d'une chaîne en utilisant Regex dans .NET.
Juste pour récupérer les deux nombres, séparés (ou non) par :
. format accepté
h:m
ou m
. Unaccepted :m
, h:
.
EDIT: Ceci est de noter que le nombre de heures pourrait déborder du 23 au ... 32 .
Le trop-plein pendant des heures (plus de 32) et minutes (sur 59) Je vais faire après la récupération des valeurs (int.Parse)
* juste pour le fun peut-être il aa regex relativement simple qui pourrait filtrer aussi> 32 pour une heure et> 59 pour minute (pour minutes il pourrait être [0-5]*[0-9]
, pendant des heures, je ne sais pas)?
La solution 4
Enfin, le code de validation (jusqu'à 32), ainsi que l'obtention de valeurs est (version vb.net):
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
Merci tout le monde contribue à cette réponse!
Autres conseils
Êtes-vous mort perchées sur une regex? Parce que DateTime.Parse
serait beaucoup plus simple et plus puissant ici.
DateTime dt = DateTime.Parse("12:30 AM");
Alors dt vous donne tout ce que vous devez savoir sur le temps. DateTime.TryParse()
peut-être mieux au cas où vous êtes moins certain que c'est une chaîne de temps.
(?:(\d\d?):)?([0-5][0-9])
Si vous voulez valider heures:
(?:([01]?[0-9]|2[0-3]):)?([0-5][0-9])
modifier :. Testé et corrigé
Cependant, la meilleure façon de le faire est avec DateTime.ParseExact
, comme ceci: (testé)
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;
Pour la validation, vous pouvez utiliser TryParseExact .
Voici la chaîne regex. Vous pouvez accéder aux groupes de capture nommés « heures » et « minutes ». Utilisez des drapeaux "ExplicitCapture" et "Singleline".
@ "^ (? (
Vous pouvez tester regexes ici: http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx
Comme mentionné précédemment, un appel d'analyse syntaxique DateTime peut-être mieux à moins que vous devez valider que seule cette forme est autorisée.
En outre, les valeurs négatives ne sont pas autorisées, ni des décimales. (Mais, l'expression rationnelle peut être modifiée pour les inclure si nécessaire).