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.

Klik Upvote
sumber
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]$
Peter O.
sumber
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

Niket Pathak
sumber
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)

Tomer
sumber
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])?$
Bahman Khalafi
sumber
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]$
Nikhil Rawat
sumber
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]$
pengguna3229770
sumber
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

Ved
sumber
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])$
Pedram Ahmadpour
sumber
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

gdmanandamohon
sumber
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]$
Basavaraj
sumber
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.

pengguna3481495
sumber
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.

Bob Light
sumber
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]$
TobiasDeVil
sumber
-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 ...


sumber
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
Manish M Demblani
sumber
-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

pythonian29033
sumber
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.

JaredPar
sumber
-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.

Shekhar
sumber