Ekspresi reguler untuk mencocokkan format HH: MM time


166

Saya ingin regexp untuk waktu yang cocok dalam format HH: MM. Inilah yang saya miliki, dan berfungsi:

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

Ini cocok dengan segalanya mulai dari 00:00 hingga 23:59.

Namun, saya ingin mengubahnya jadi 0:00 dan 1:00, dll juga cocok dengan 00:00 dan 01:30. Yaitu untuk membuat digit paling kiri opsional, agar sesuai dengan HH: MM serta H: MM.

Ada ide bagaimana cara mengubahnya? Saya membutuhkan ini untuk bekerja di javascript dan juga php.


15
Sebenarnya regexp asli Anda tidak akan cocok dengan seluruh rentang nilai waktu yang valid, mis. 17:00
David Clarke

Jawaban:


366

Ekspresi reguler orisinal Anda memiliki kekurangan: 04:00contohnya tidak cocok .

Ini mungkin bekerja lebih baik:

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

45
RegExp ini adalah untuk waktu tanpa memimpin nol. RegExp untuk waktu dengan nol di depan adalah^([0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$
SergO

15
@SergO harap baca jawabannya lebih hati-hati. Jawabannya adalah untuk nol di depan dan di luar.
Alexander

11
Bentuk yang sedikit lebih pendek adalah^(?:\d|[01]\d|2[0-3]):[0-5]\d$
Billy Jo

2
Bekerja dengan baik di C # juga.
Richard Ev

10
@SergO tidak seharusnya ^ (0 [0-9] | 1 [0-9] | 2 [0-3]): [0-5] [0-9] $?
Martin

58

Ekspresi Reguler untuk Waktu

  • HH: Format MM 12 jam, opsional 0 terkemuka

    /^(0?[1-9]|1[0-2]):[0-5][0-9]\d$/
  • HH: Format 12-jam MM, opsional 0 terkemuka, meridiem wajib (AM / PM)

    /((1[0-2]|0?[1-9]):([0-5][0-9]) ?([AaPp][Mm]))/
  • HH: MM 24 jam dengan memimpin 0

    /^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
  • HH: Format 24 jam MM, memimpin 0 opsional

    /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
  • HH: MM: Format 24 jam SS dengan memimpin 0

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

Referensi dan Demo


4
Terima kasih! Jawaban ini harus di atas.
Marc

Ada alasan HH: MM 24 jam dengan 0 memimpin bukan ^([0-2][0-3]|[0-1][0-9]):[0-5][0-9]+$?
Vlad Macovei

Karena regex dalam jawaban berfungsi dengan baik. Dan yang Anda komentari juga berfungsi. Jangan ragu untuk menggunakan keduanya. :)
Niket Pathak

Untuk orang yang mencocokkan string 12 jam (dengan am / pm) dengan regex di atas, perlu diingat bahwa pengujian "13:00 PM" terhadap regex akan menghasilkan true (beberapa nilai) karena bagian "3:00 PM" dalam string adalah sah. Saya menyelesaikan masalah dengan menggunakan pernyataan if berikut ini biarkan res = value.match (regex); if (res && res [0] === value) doSomething ();
Taha Rehman Siddiqui

49

Tidak satu pun di atas bekerja untuk saya. Pada akhirnya saya menggunakan:

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

Logika:

Angka pertama (jam) adalah: angka antara 0 dan 19 -> [0-1]?[0-9](memungkinkan angka satu digit)
atau
angka antara 20 - 23 ->2[0-3]

angka kedua (menit) selalu merupakan angka antara 00 dan 59 -> [0-5][0-9](tidak memungkinkan satu digit)


8
Anda tidak perlu tanda hubung dalam tanda kurung siku pertama, [01]berfungsi dengan baik;)
Czechnology

3
Inilah jawaban yang direvisi untuk hanya menerima waktu 12 jam (termasuk nol terkemuka opsional):^(0?[1-9]|1[0-2]):[0-5][0-9]$
rgbflawed

^([0-1][0-9]|2[0-3]):[0-5][0-9]$untuk memaksa nol di depan
Manan Mehta

8

Anda dapat menggunakan ini 24 jam, detik adalah opsional

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

4

Yang terbaik adalah untuk HH: MM tanpa mengambil risiko apa pun.

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

dapatkah ini dipersingkat ^([0-1]\d|2[0-3]):[0-5]\d$?
AlbinoDrought

3

Hebatnya saya menemukan sebenarnya semua ini tidak cukup menutupinya, karena mereka tidak bekerja untuk format pendek tengah malam 0: 0 dan beberapa tidak berfungsi untuk 00:00, saya menggunakan dan menguji yang berikut:

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

2

Anda dapat menggunakan ungkapan reguler ini:

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

Jika Anda ingin mengecualikan 00:00, Anda dapat menggunakan ungkapan ini

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

Ekspresi kedua adalah opsi yang lebih baik karena waktu yang valid adalah 00:01 hingga 00:59 atau 0:01 hingga 23:59. Anda dapat menggunakan semua ini berdasarkan kebutuhan Anda. Tautan Regex101


Ungkapan pertama tidak menerima 00: 05 . Tapi terima kasih. Menuntun saya ke validasi yang saya cari.
JazZ

2

Cocok:

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

Gunakan:

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

jam berapa sekarang 2: 9 atau 02: 9?
vs97

misalnya dalam C # ada begitu banyak opsi untuk mengubah objek DateTime menjadi string. DateTime date1 = new DateTime(2008, 1, 1, 6, 9, 1); Console.WriteLine(date1.ToString("H:mm:ss", CultureInfo.InvariantCulture)); // Displays 6:09:01 . untuk informasi lebih lanjut lihat tautan
Pedram Ahmadpour

1

Ketika Anda bertanya paling kiri bit opsional, saya telah melakukan paling kiri dan paling kanan bit opsional juga, periksa

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

Cocok dengan

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

Tautan langsung tersedia di sini


0

Anda dapat menggunakan regex berikut:

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

0

Menyatakan

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();
}

Metode ini mengembalikan "true" ketika String cocok dengan Ekspresi Reguler.


0

Sedikit modifikasi pada kontribusi Manish M Demblani di atas menangani pukul 4 pagi (saya menyingkirkan bagian detik karena saya tidak memerlukannya dalam aplikasi saya)

^(([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]))$

menangani: 4 pagi 4 pagi 4:00 4:00 4:00 sore 4.30 pagi dll.


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

0

Regex di bawah ini akan membantu memvalidasi format jj: mm

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

-1

Punya saya:

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

Ini jauh lebih pendek

Sudah diuji dengan beberapa contoh

Pertandingan:

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

Dan tidak cocok dengan instance tidak valid seperti 25:76 dll ...


09:30tidak cocok
Hijau

Contoh Anda sendiri 00:00 dan 07:43 tidak cocok.
Christiaan Westerbeek

-1

Anda dapat mencoba yang berikut ini

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

Itu dapat mendeteksi pola berikut:

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

periksa regex detector timestamp masterfull yang saya buat ini untuk mencari cap waktu yang ditentukan pengguna, contoh-contoh apa yang akan diambil oleh pickup, tetapi yang pasti TIDAK terbatas;

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

Ini juga akan mengambil lebih banyak lagi, asalkan kali termasuk digit


1
RegExr requires a modern browser. Please update your browser to the latest version and try again.... Aku bahkan tidak bisa melihatnya ...: - /
Martin Tournoij

-3

Coba yang berikut ini

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

Catatan: Saya mengasumsikan mesin regex javascript. Jika berbeda dari itu, beri tahu saya.


-3

Anda dapat menggunakan regex berikut:

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

Hanya modifikasi yang saya buat adalah digit paling kiri adalah opsional. Sisa regex sama.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.