2013-09-30 9 views
5

używam dwa regex do sprawdzania czasu w formacie 12 godzinnej i 24 godziny na dobę, ale w niektórych przypadkach nie jest working.Am robię coś złego w tych regex? To nie działaRegex dla formatu 12 godzinnej i czas 24 godziny na dobę

walidacji formatu 12 hr jak 10:00/12: południe Użyłem regex

^(([0]?[0-9]|1[0-2]):[0-5][0-9][ ][aApP][mM])|((1[3-9]|2[0-3]):[0-5][0-9])$ 

walidacji formatu 24 hr jak 23: 00/12: 00 Użyłem rEGEX

^(([0]?[0-9]|1[0-2]):[0-5][0-9])|((1[3-9]|2[0-3]):[0-5][0-9])$ 
+2

punkt niektóre przypadki, w których wyrazy regularne nie działają? Czy wypróbowałeś niektóre narzędzie regex, takie jak Expresso, aby sprawdzić swoje wyrażenia regularne? – Ingo

+0

Format wyrażeń regularnych zależy od aplikacji. Piszesz wyrazy regularne perl. Nie będą działać z emacs. Przeszukaj internet. Znajdziesz tu wiele wbudowanych wyrażeń regularnych, np .: http://regexlib.com/DisplayPatterns.aspx?cattabindex=4&categoryId=5&AspxAutoDetectCookieSupport=1. – Tobias

+0

Myślę, że możesz użyć js tutaj zamiast validation.try, aby obejrzeć to demo: http: //keith-wood.name/timeEntry.html –

Odpowiedz

11

Nie jestem pewien, dlaczego masz jakieś 24 godziny r formatuj w swoim pierwszym wyrażeniu regularnym. Format 12 godz sam mógłby zostać uproszczone do tego:

new Regex(@"^(?:0?[0-9]|1[0-2]):[0-5][0-9] [ap]m$", RegexOptions.IgnoreCase); 

A dla formatu 24 h, można uprościć do:

new Regex(@"^(?:[01][0-9]|2[0-3]):[0-5][0-9]$"); 

Albo połączyć oba:

new Regex(@"^(?:(?:0?[0-9]|1[0-2]):[0-5][0-9] [ap]m|(?:[01][0-9]|2[0-3]):[0-5][0-9])$", RegexOptions.IgnoreCase); 
+1

+1, ale nie potrzebujesz 'IgnoreCase' w ciągu 24h, i możesz lub nie chcesz, aby opcja [01] była opcjonalna. –

+0

@TimPietzcker Dzięki, to ja za kopiowanie/wklejanie linii xD – Jerry

Powiązane problemy