Regex Hour : Minute (시간> 24)
문제
나는하고 싶다 확인 그리고 발췌 그만큼 문자열에서 몇 시간과 몇 분 .NET에서 Regex 사용. 분리 된 두 숫자를 회복시키기 위해 :
. 허용 형식h:m
또는 m
. 받아 들여지지 않습니다 :m
, h:
.
편집하다:이것은 수의 수입니다 시간 23까지 오버플로 할 수 있습니다 ... 32.
몇 시간 (32 개 이상)과 분 (59 세 이상)의 오버플로 나는 값을 회복 한 후 (int.parse) 할 것입니다.
* 재미로 어쩌면 시간 동안> 32를, 1 분 동안> 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
이 답변에 기여하는 모든 분들께 감사드립니다!
다른 팁
당신은 Regex에 죽었습니까? 왜냐하면 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 문자열이 있습니다. 명명 된 캡처 그룹 "시간"및 "분"에 액세스 할 수 있습니다. "ExplicitCapture"및 "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를 포함하도록 변경 될 수 있습니다).