นิพจน์ทั่วไปสำหรับการจับคู่รูปแบบเวลา HH: MM


167

ฉันต้องการ regexp สำหรับเวลาจับคู่ในรูปแบบ HH: MM นี่คือสิ่งที่ฉันมีและใช้งานได้:

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

สิ่งนี้ตรงกับทุกอย่างตั้งแต่ 00:00 น. ถึง 23:59 น.

อย่างไรก็ตามฉันต้องการเปลี่ยนเพื่อให้ 00:00 น. และ 01:00 น. ฯลฯ มีการจับคู่และ 00:00 น. และ 01:30 น. นั่นคือเพื่อให้ตัวเลขทางซ้ายสุดเป็นทางเลือกเพื่อจับคู่ HH: MM และ H: MM

ความคิดใดที่จะทำให้การเปลี่ยนแปลงนั้น? ฉันต้องการสิ่งนี้เพื่อทำงานใน javascript เช่นเดียวกับ php


15
ที่จริงแล้ว regexp ดั้งเดิมของคุณจะไม่ตรงกับช่วงเวลาที่ถูกต้องเช่น 17:00
David Clarke

คำตอบ:


367

การแสดงออกปกติของคุณมีข้อบกพร่อง: มันจะไม่ตรงกับ04:00ตัวอย่าง

สิ่งนี้อาจทำงานได้ดีกว่า:

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

46
regExp นี้ใช้เวลาโดยไม่มีศูนย์นำหน้า RegExp สำหรับเวลาที่มีศูนย์นำหน้าคือ^([0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$
SergO

15
@SergO โปรดอ่านคำตอบของเขาอย่างระมัดระวังมากขึ้น คำตอบของเขาสำหรับทั้งศูนย์นำและไม่
Alexander

11
แบบฟอร์มที่สั้นกว่าเล็กน้อยคือ^(?:\d|[01]\d|2[0-3]):[0-5]\d$
Billy Jo

2
ทำงานได้ดีใน C # เช่นกัน
Richard Ev

10
@SergO ไม่ควรเป็น ^ (0 [0-9] | 1 [0-9] | 2 [0-3]): [0-5] [0-9] $?
Martin

58

นิพจน์ทั่วไปสำหรับเวลา

  • HH: MM รูปแบบ 12 ชั่วโมงตัวเลือกนำหน้า 0

    /^(0?[1-9]|1[0-2]):[0-5][0-9]\d$/
  • HH: MM รูปแบบ 12 ชั่วโมงตัวเลือกนำหน้า 0, meridiems บังคับ (AM / PM)

    /((1[0-2]|0?[1-9]):([0-5][0-9]) ?([AaPp][Mm]))/
  • HH: MM ตลอด 24 ชั่วโมงโดยมีผู้นำ 0

    /^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
  • HH: MM รูปแบบ 24 ชั่วโมงตัวเลือกนำหน้า 0

    /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
  • HH: MM: SS รูปแบบ 24 ชั่วโมงพร้อมนำหน้า 0

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

การอ้างอิงและการสาธิต


4
ขอบคุณ! คำตอบนี้ควรอยู่ด้านบน
Marc

เหตุผลใดที่HH: MM ตลอด 24 ชั่วโมงด้วยการนำ 0ไม่ได้^([0-2][0-3]|[0-1][0-9]):[0-5][0-9]+$หรือไม่
Vlad Macovei

เพราะ regex ในคำตอบใช้ได้ดี และสิ่งที่คุณแสดงความคิดเห็นก็ใช้ได้เช่นกัน รู้สึกอิสระที่จะใช้อย่างใดอย่างหนึ่ง :)
Niket Pathak

สำหรับคนที่จับคู่ 12 ชั่วโมง (กับ am / pm) สตริงที่มี regex ข้างต้นโปรดทราบว่าการทดสอบ "13:00 PM" กับ regex จะส่งคืนค่าจริง (บางค่า) เพราะส่วน "3:00 PM" ในสตริงคือ ถูกต้อง. ฉันแก้ไขปัญหาโดยใช้คำสั่งต่อไปนี้ถ้า statement let res = value.match (regex); ถ้า (res && res [0] ค่า ===) doSomething ();
Taha Rehman Siddiqui

49

ไม่มีข้อใดถูกเลยสำหรับฉัน ในที่สุดฉันใช้:

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

ตรรกะ:

หมายเลขแรก (ชั่วโมง) คือ: ตัวเลขระหว่าง 0 ถึง 19 -> [0-1]?[0-9](อนุญาตให้ใช้ตัวเลขหลักเดียว)
หรือ
ตัวเลขระหว่าง 20 - 23 ->2[0-3]

ตัวเลขที่สอง (นาที) จะเป็นตัวเลขระหว่าง 00 ถึง 59 -> เสมอ[0-5][0-9](ไม่อนุญาตให้มีตัวเลขหลักเดียว)


8
คุณไม่ต้องการเส้นประในวงเล็บสี่เหลี่ยมตัวแรก[01]ทำงานได้เหมือนกัน;)
Czechnology

3
นี่คือคำตอบนี้แก้ไขเพื่อยอมรับเวลา 12 ชั่วโมงเท่านั้น (รวมถึงศูนย์นำหน้าทางเลือก):^(0?[1-9]|1[0-2]):[0-5][0-9]$
rgbflawed

^([0-1][0-9]|2[0-3]):[0-5][0-9]$เพื่อบังคับให้ศูนย์นำหน้า
Manan Mehta


4

สิ่งที่ดีที่สุดสำหรับ HH: MM โดยไม่มีความเสี่ยง

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

สามารถย่อให้สั้นลงได้^([0-1]\d|2[0-3]):[0-5]\d$ไหม
AlbinoDrought

3

น่าแปลกใจที่ฉันพบว่าสิ่งเหล่านี้ไม่ครอบคลุมเลยเนื่องจากมันใช้งานไม่ได้สำหรับรูปแบบที่สั้นกว่าของเที่ยงคืนที่ 0: 0 และอีกสองสามอันไม่ทำงานสำหรับ 00:00 ฉันก็ใช้และทดสอบต่อไปนี้:

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

2

คุณสามารถใช้นิพจน์ทั่วไปนี้:

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

หากคุณต้องการยกเว้น 00:00 คุณสามารถใช้นิพจน์นี้ได้

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

การแสดงออกที่สองเป็นตัวเลือกที่ดีกว่าเพราะเวลาที่ถูกต้องคือ 00:01 ถึง 00:59 หรือ 0:01 ถึง 23:59 คุณสามารถใช้สิ่งเหล่านี้ตามความต้องการของคุณ ลิงก์ Regex101


การแสดงออกครั้งแรกไม่ยอมรับ 00: 05 แต่ขอบคุณ. นำฉันไปสู่การตรวจสอบที่ฉันกำลังมองหา
JazZ

2

ตรงกัน:

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

ใช้มัน:

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

เวลา 2: 9 หรือ 02: 9 เป็นอย่างไร
vs97

เช่นใน C # มีตัวเลือกมากมายในการแปลงวัตถุ DateTime เป็นสตริง DateTime date1 = new DateTime(2008, 1, 1, 6, 9, 1); Console.WriteLine(date1.ToString("H:mm:ss", CultureInfo.InvariantCulture)); // Displays 6:09:01 . สำหรับข้อมูลเพิ่มเติมดูลิงค์
Pedram Ahmadpour

1

ในขณะที่คุณถามตัวเลือกบิตที่เหลือมากที่สุดฉันได้เลือกตัวเลือกบิตซ้ายและขวาสุดแล้ว

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

มันตรงกับ

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

ลิงค์อยู่ที่นี่



0

ประกาศ

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

วิธีการนี้จะส่งกลับ "จริง" เมื่อ String จับคู่กับนิพจน์ปกติ


0

การปรับเปลี่ยนเล็กน้อยเพื่อสนับสนุนของManish M Demblaniด้านบนจัดการ 4am (ฉันได้ลบส่วนวินาทีเนื่องจากฉันไม่ต้องการในแอปพลิเคชันของฉัน)

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

จับ: 04:00 น. 4:00 น. 4:00 น. 16:00 น. 16:30 น. ฯลฯ


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


-1

ของฉันคือ:

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

มันสั้นกว่ามาก

ได้ทดสอบกับตัวอย่างหลาย ๆ

การจับคู่:

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

และไม่ตรงกับอินสแตนซ์ที่ไม่ถูกต้องเช่น 25:76 ฯลฯ ...


09:30ไม่ตรงกัน
สีเขียว

ตัวอย่างของคุณเอง 00:00 น. และ 07:43 น. ไม่ตรงกัน
Christiaan Westerbeek

-1

คุณสามารถลองต่อไปนี้

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

มันสามารถตรวจจับรูปแบบต่อไปนี้:

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

ตรวจสอบregex ตัวตรวจจับการประทับเวลาต้นแบบนี้ฉันสร้างขึ้นเพื่อค้นหาการประทับเวลาที่ผู้ใช้ระบุตัวอย่างของสิ่งที่จะรับรวมถึง แต่ไม่แน่นอน จำกัด มากที่สุด

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

นอกจากนี้ยังจะมีจำนวนมากขึ้นตราบใดที่มีตัวเลข


1
RegExr requires a modern browser. Please update your browser to the latest version and try again.... ฉันไม่เห็นด้วยซ้ำ ... : - /
Martin Tournoij

-3

ลองทำสิ่งต่อไปนี้

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

หมายเหตุ: ฉันสมมติว่าโปรแกรม javascript regex ถ้ามันแตกต่างไปจากนั้นโปรดแจ้งให้เราทราบ


-3

คุณสามารถใช้ regex ต่อไปนี้:

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

เฉพาะการดัดแปลงที่ฉันทำคือตัวเลขทางซ้ายสุดเป็นตัวเลือก ส่วนที่เหลือของ regex เหมือนกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.