Regex ساعة: دقيقة (ساعة> 24)
سؤال
وأود أن التحقق من صحة و مقتطف ال ساعات ودقائق من سلسلة باستخدام Regex في .NET. فقط لاستعادة الرقمين، مفصولة (أم لا) :
. وبعد تنسيق مقبولh:m
أو m
. وبعد غير مقبول :m
, h:
.
تعديل:هذا هو ملاحظة ذلك، أن عدد ساعات يمكن أن تتجاوز 23 حتى ... 32.
الفائض لساعات (أكثر من 32) والدقائق (أكثر من 59) سأفعل بعد تقدير القيم (Int.parse)
* فقط للمتعة ربما هناك AA Regex النسبي بسيط يمكنه تصفية أيضا> 32 لمدة ساعة و> 59 لمدة دقيقة (ل الدقائق يمكن ان تكون [0-5]*[0-9]
, لساعات لا أعرف)؟
المحلول 4
أخيرا، رمز التحقق من الصحة (حتى 32) وأيضا الحصول على القيم هو (إصدار 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
شكرا للجميع المساهمة في هذه الإجابة!
نصائح أخرى
هل أنت ميت مجموعة على ريجيكس؟ لأن DateTime.Parse
سيكون أكثر بساطة وأكثر قوة هنا.
DateTime dt = DateTime.Parse("12:30 AM");
ثم يمنحك DT كل ما تحتاجه لمعرفته عن الوقت. DateTime.TryParse()
قد يكون أفضل في حال كنت أقل معينة، إنها سلسلة زمنية.
(?:(\d\d?):)?([0-5][0-9])
إذا كنت ترغب في التحقق من صحة ساعات:
(?:([01]?[0-9]|2[0-3]):)?([0-5][0-9])
تعديل: اختبار وتصحيحها.
ومع ذلك، فإن أفضل طريقة للقيام بذلك مع DateTime.ParseExact
, ، مثل هذا: (اختبار)
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;
للتحقق من الصحة، يمكنك استخدام tryparseexact.
إليك سلسلة Regex. يمكنك الوصول إلى مجموعات الالتقاط المسمى "ساعات" و "دقائق". استخدم الأعلام "Expliciccapture" و "Singleline".
@ "^ ((؟u003Chours> [0-9] {1،2}) :)؟ (؟u003Cminutes> [0-9] {1،2}) $ "
يمكنك اختبار Regexes هنا: http://derekslager.com/blog/posts/2007/09/a-better-dotnet-Regular-expression-tester.ashx.
كما ذكر، قد تكون مكالمة تحليل DateTime أفضل ما لم تكن بحاجة إلى التحقق من صحة هذا النموذج فقط مسموح به.
أيضا، لا يسمح بالقيم السلبية، ولا هي الكسور العشرية. (ولكن، يمكن تغيير Regex لتضمينها إذا لزم الأمر).