Biểu thức chính quy để khớp định dạng thời gian HH: MM


166

Tôi muốn một biểu thức chính quy cho thời gian khớp ở định dạng HH: MM. Đây là những gì tôi có, và nó hoạt động:

^[0-2][0-3]:[0-5][0-9]$

Điều này phù hợp với tất cả mọi thứ từ 00:00 đến 23:59.

Tuy nhiên, tôi muốn thay đổi nó để 0:00 và 1:00, vv cũng được khớp với 00:00 và 01:30. Tức là tạo chữ số ngoài cùng bên trái tùy chọn, để khớp với HH: MM cũng như H: MM.

Bất kỳ ý tưởng làm thế nào để thay đổi? Tôi cần điều này để làm việc trong javascript cũng như php.


15
Trên thực tế, biểu thức chính quy ban đầu của bạn sẽ không khớp với toàn bộ phạm vi giá trị thời gian hợp lệ, ví dụ: 17:00
David Clarke

Câu trả lời:


366

Biểu thức chính quy ban đầu của bạn có sai sót: chẳng hạn, nó sẽ không khớp 04:00.

Điều này có thể hoạt động tốt hơn:

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

45
RegExp này là dành cho thời gian mà không dẫn đầu. RegExp cho thời gian với số 0 đứng đầu là^([0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$
SergO

15
@SergO vui lòng đọc câu trả lời của anh ấy cẩn thận hơn. Câu trả lời của ông là cho cả một số không và không có hàng đầu.
Alexander

11
Một hình thức ngắn hơn một chút là^(?:\d|[01]\d|2[0-3]):[0-5]\d$
Billy Jo

2
Hoạt động độc đáo trong C # là tốt.
Richard Ev

10
@SergO không nên là ^ (0 [0-9] | 1 [0-9] | 2 [0-3]): [0-5] [0-9] $?
Martin

58

Biểu thức chính quy cho thời gian

  • HH: MM định dạng 12 giờ, tùy chọn hàng đầu 0

    /^(0?[1-9]|1[0-2]):[0-5][0-9]\d$/
  • HH: MM định dạng 12 giờ, hàng đầu tùy chọn 0, meridiems bắt buộc (AM / PM)

    /((1[0-2]|0?[1-9]):([0-5][0-9]) ?([AaPp][Mm]))/
  • HH: MM 24 giờ với 0 dẫn đầu

    /^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
  • HH: MM định dạng 24 giờ, tùy chọn hàng đầu 0

    /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
  • HH: MM: SS định dạng 24 giờ với số 0 đứng đầu

    /(?:[01]\d|2[0-3]):(?:[0-5]\d):(?:[0-5]\d)/

Tham khảo và Demo


4
Cảm ơn bạn! Câu trả lời này nên ở đầu trang.
Marc

Có lý do nào HH: MM 24 giờ với dẫn 0 không ^([0-2][0-3]|[0-1][0-9]):[0-5][0-9]+$?
Vlad Macovei

Bởi vì regex trong câu trả lời hoạt động tốt. Và một trong những bạn nhận xét làm việc quá. Hãy sử dụng một trong hai. :)
Niket Pathak

Đối với những người khớp chuỗi 12 giờ (với am / pm) với regex ở trên, hãy nhớ rằng việc kiểm tra "13:00 PM" so với regex sẽ trả về true (một số giá trị) vì phần "3:00 PM" trong chuỗi là có hiệu lực. Tôi đã giải quyết vấn đề bằng cách sử dụng câu lệnh if sau let res = value.match (regex); if (res && res [0] === value) doS Something ();
Taha Rehman Siddiqui

49

Không ai ở trên làm việc cho tôi. Cuối cùng tôi đã sử dụng:

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

Hợp lý:

Số đầu tiên (giờ) là: một số trong khoảng từ 0 đến 19 -> [0-1]?[0-9](cho phép số có một chữ số)
hoặc
một số trong khoảng từ 20 - 23 ->2[0-3]

số thứ hai (phút) luôn là một số trong khoảng từ 00 đến 59 -> [0-5][0-9](không cho phép một chữ số)


8
Bạn không cần dấu gạch ngang trong dấu ngoặc vuông đầu tiên, cũng [01]hoạt động tốt;)
Công nghệ

3
Đây là câu trả lời được sửa đổi để chỉ chấp nhận thời gian 12 giờ (bao gồm các số 0 đứng đầu tùy chọn):^(0?[1-9]|1[0-2]):[0-5][0-9]$
rgbflawed

^([0-1][0-9]|2[0-3]):[0-5][0-9]$để buộc một số 0 hàng đầu
Manan Mehta

8

Bạn có thể sử dụng cái này 24 giờ, giây là tùy chọn

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

4

Điều tốt nhất sẽ là cho HH: MM mà không phải chịu bất kỳ rủi ro nào.

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

điều này có thể được rút ngắn ^([0-1]\d|2[0-3]):[0-5]\d$?
AlbinoDved

3

Thật ngạc nhiên tôi thấy thực sự tất cả những thứ này không bao gồm nó, vì chúng không hoạt động với định dạng ngắn hơn nửa đêm 0: 0 và một số không hoạt động trong 00:00, tôi đã sử dụng và thử nghiệm như sau:

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

2

Bạn có thể sử dụng biểu thức chính quy này:

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

Nếu bạn muốn loại trừ 00:00, bạn có thể sử dụng biểu thức này

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

Biểu thức thứ hai là tùy chọn tốt hơn vì thời gian hợp lệ là 00:01 đến 00:59 hoặc 0:01 đến 23:59. Bạn có thể sử dụng bất kỳ trong số này theo yêu cầu của bạn. Liên kết Regex101


Biểu thức đầu tiên không chấp nhận 00: 05 . Nhưng cảm ơn. Dẫn tôi đến xác nhận tôi đang tìm kiếm.
JazZ

2

Diêm:

2: 9
2:09
2:59
02: 9
02:09
02:59
23:59

Sử dụng nó:

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

2: 9 hay 02: 9 là loại thời gian nào?
vs97

ví dụ trong C # có rất nhiều tùy chọn để chuyển đổi đối tượng DateTime thành chuỗi. DateTime date1 = new DateTime(2008, 1, 1, 6, 9, 1); Console.WriteLine(date1.ToString("H:mm:ss", CultureInfo.InvariantCulture)); // Displays 6:09:01 . để biết thêm thông tin, xem liên kết
Pedram Ahmadpour 30/07/19

1

Khi bạn hỏi hầu hết các tùy chọn bên trái, tôi cũng đã thực hiện hầu hết các tùy chọn bên trái và bên phải hầu hết các tùy chọn, hãy kiểm tra nó

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

Nó phù hợp với

0:0 
00:00
00:0 
0:00
23:59
01:00
00:59

Liên kết trực tiếp có sẵn ở đây


0

Bạn có thể sử dụng regex sau:

^[0-1][0-9]:[0-5][0-9]$|^[2][0-3]:[0-5][0-9]$|^[2][3]:[0][0]$

0

Khai báo

private static final String TIME24HOURS_PATTERN = "([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]";

public boolean validate(final String time) {
    pattern = Pattern.compile(TIME24HOURS_PATTERN);
    matcher = pattern.matcher(time);
    return matcher.matches();
}

Phương thức này trả về "true" khi String khớp với Biểu thức chính quy.


0

Một sửa đổi nhỏ cho đóng góp của Manish M Demblani ở trên xử lý 4 giờ sáng (Tôi đã thoát khỏi phần giây vì tôi không cần nó trong ứng dụng của mình)

^(([0-1]{0,1}[0-9]( )?(AM|am|aM|Am|PM|pm|pM|Pm))|(([0]?[1-9]|1[0-2])(:|\.)[0-5][0-9]( )?(AM|am|aM|Am|PM|pm|pM|Pm))|(([0]?[0-9]|1[0-9]|2[0-3])(:|\.)[0-5][0-9]))$

xử lý: 4 giờ sáng 4 giờ sáng 4:00 sáng 4:00 chiều 4,30 sáng vv ..


1
AM|am|aM|Am|PM|pm|pM|Pm=[AaPp][Mm]
Ed Morton

0

Regex dưới đây sẽ giúp xác thực định dạng hh: mm

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

-1

Của tôi là:

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

Cái này ngắn hơn nhiều

Đã thử nó với một vài ví dụ

Trận đấu:

  • 00:00
  • 7:43
  • 07:43
  • 19:00
  • 18h23

Và không khớp với bất kỳ trường hợp không hợp lệ nào, chẳng hạn như 25:76, v.v ...


09:30không khớp
Green

Ví dụ của riêng bạn 00:00 và 07:43 không khớp.
Christiaan Westerbeek

-1

Bạn có thể thử như sau

^\d{1,2}([:.]?\d{1,2})?([ ]?[a|p]m)?$

Nó có thể phát hiện các mẫu sau:

2300 
23:00 
4 am 
4am 
4pm 
4 pm
04:30pm 
04:30 pm 
4:30pm 
4:30 pm
04.30pm
04.30 pm
4.30pm
4.30 pm
23:59 
0000 
00:00

-1

kiểm tra biểu thức dấu thời gian chính xác này tôi đã xây dựng để tìm kiếm dấu thời gian do người dùng chỉ định, ví dụ về những gì nó sẽ lấy bao gồm, nhưng chắc chắn nhất là KHÔNG giới hạn;

8:30-9:40
09:40-09 : 50
09 : 40-09 : 50
09:40 - 09 : 50
08:00to05:00
08 : 00to05 : 00
08:00 to 05:00
8am-09pm
08h00 till 17h00
8pm-5am
08h00,21h00
06pm untill 9am

Nó cũng sẽ đón nhiều hơn nữa, miễn là thời gian bao gồm các chữ số


1
RegExr requires a modern browser. Please update your browser to the latest version and try again.... Tôi thậm chí không thể nhìn thấy nó ...: - /
Martin Tournoij

-3

Hãy thử như sau

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

Lưu ý: Tôi đã giả sử công cụ regex javascript. Nếu nó khác hơn xin vui lòng cho tôi biết.


-3

Bạn có thể sử dụng regex sau:

^[0-2]?[0-3]:[0-5][0-9]$

Chỉ sửa đổi tôi đã thực hiện là chữ số ngoài cùng bên trái là tùy chọn. Phần còn lại của regex là như nhau.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.