2013-09-30 33 views
5

Tôi đang sử dụng hai regex cho xác thực thời gian ở định dạng 12hr và 24 giờ, nhưng trong một số trường hợp nó không phải là working.Am tôi làm điều gì đó sai trong các regex? Nó không phải là làm việcRegex cho định dạng 12hr và thời gian 24 giờ

để phê chuẩn định dạng 12 giờ như 10:00/12: 00 PM tôi đã sử dụng regex

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

để phê chuẩn định dạng 24 giờ như 23: 00/12 giờ: 00 tôi đã sử dụng regex

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

điểm ra một số trường hợp mà regexes của bạn không làm việc với? Bạn đã thử một số công cụ regex như Expresso để kiểm tra regex của bạn? – Ingo

+0

Định dạng của cụm từ thông dụng phụ thuộc vào ứng dụng. Bạn viết biểu thức chính quy. Chúng sẽ không hoạt động với các emac. Tìm kiếm trên mạng. Ở đó, bạn tìm thấy nhiều biểu thức chính quy được xây dựng sẵn, ví dụ: http://regexlib.com/DisplayPatterns.aspx?cattabindex=4&categoryId=5&AspxAutoDetectCookieSupport=1. – Tobias

+0

tôi nghĩ rằng bạn có thể sử dụng js ở đây thay vì validation.try để xem demo này: http: //keith-wood.name/timeEntry.html –

Trả lời

11

Tôi không chắc tại sao bạn có một số trong 24 giờ r định dạng trong regex đầu tiên của bạn. Các định dạng 12 giờ một mình có thể được đơn giản hóa như sau:

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

Và đối với định dạng 24 giờ, bạn có thể đơn giản hóa nó để:

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

Hoặc kết hợp cả hai:

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, nhưng bạn không cần 'IgnoreCase' trong regex 24h, và bạn có thể hoặc không muốn tạo tùy chọn '[01]'. –

+0

@TimPietzcker Cảm ơn, đó là tôi cho các dòng sao chép/dán xD – Jerry

Các vấn đề liên quan