एचएच मिलान के लिए नियमित अभिव्यक्ति: एमएम समय प्रारूप


166

मैं HH: MM प्रारूप में मिलान समय के लिए एक regexp चाहता हूं। यहाँ मेरे पास क्या है, और यह काम करता है:

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

यह सब कुछ 00:00 से 23:59 तक मेल खाता है।

हालाँकि, मैं इसे बदलना चाहता हूँ इसलिए 0:00 और 1:00, आदि भी 00:00 और 01:30 के साथ मेल खाते हैं। एचएच: एमएम के साथ-साथ एच: एमएम से मेल करने के लिए सबसे बाएं अंक को वैकल्पिक बनाने के लिए।

किसी भी विचार कि परिवर्तन कैसे करना है? मुझे जावास्क्रिप्ट के साथ-साथ php में काम करने के लिए इसकी आवश्यकता है।


15
वास्तव में आपका मूल regexp मान्य समय मानों की एक पूरी श्रृंखला से मेल नहीं खाएगा, जैसे कि 17:00
डेविड क्लार्क

जवाबों:


366

आपकी मूल नियमित अभिव्यक्ति में दोष हैं: यह 04:00उदाहरण के लिए मेल नहीं खाता ।

यह बेहतर काम कर सकता है:

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

45
यह regExp समय के लिए अग्रणी शून्य के बिना है। अग्रणी शून्य के साथ समय के लिए RegExp है^([0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$
SergO

15
@ शेरो कृपया उनके उत्तर को और ध्यान से पढ़ें। उनका जवाब एक अग्रणी शून्य और बिना दोनों के लिए है।
अलेक्जेंडर

11
थोड़ा छोटा रूप है^(?:\d|[01]\d|2[0-3]):[0-5]\d$
बिली जो

2
सी # में अच्छी तरह से काम करता है।
रिचर्ड ईव

10
@SergO ^ (0 [0-9] | 1 [0-9] | 2 [0-3]): [0-5] [0-9] $ नहीं होना चाहिए?
मार्टिन

58

समय के लिए नियमित अभिव्यक्ति

  • एचएच: एमएम 12-घंटे का प्रारूप, वैकल्पिक अग्रणी 0

    /^(0?[1-9]|1[0-2]):[0-5][0-9]\d$/
  • एचएच: एमएम 12-घंटे का प्रारूप, वैकल्पिक अग्रणी 0, अनिवार्य योग्यताएं (एएम / पीएम)

    /((1[0-2]|0?[1-9]):([0-5][0-9]) ?([AaPp][Mm]))/
  • एचएच: एमएम 24-घंटे अग्रणी 0 के साथ

    /^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
  • एचएच: एमएम 24-घंटे का प्रारूप, वैकल्पिक अग्रणी 0

    /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
  • HH: MM: SS 0 के साथ 24-घंटे का प्रारूप

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

संदर्भ और डेमो


4
धन्यवाद! यह उत्तर सबसे ऊपर होना चाहिए।
मार्क

किसी भी कारण एचएच: एमएम 24-घंटे अग्रणी 0 के साथ नहीं है ^([0-2][0-3]|[0-1][0-9]):[0-5][0-9]+$?
व्लादि मैकोवे

क्योंकि जवाब में रेगेक्स अच्छा काम करता है। और जिस पर आपने टिप्पणी की है वह भी काम करता है। बेझिझक दोनों में से किसी एक का इस्तेमाल करें। :)
निकेत पाठक

उपरोक्त रेगेक्स के साथ 12 घंटे (am / pm) स्ट्रिंग्स से मेल खाने वाले लोगों के लिए, ध्यान रखें कि regex के खिलाफ "13:00 PM" परीक्षण सही (कुछ मान) वापस आएगा क्योंकि स्ट्रिंग में "3:00 PM" भाग है वैध। मैंने निम्नलिखित का उपयोग करके समस्या को हल किया यदि कथन res = value.match (regex); अगर (Res && res [0] === मूल्य) doSomething ();
ताहा रहमान सिद्दीकी

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]$एक प्रमुख शून्य को मजबूर करने के लिए
मनन मेहता

8

आप इस 24H का उपयोग कर सकते हैं, सेकंड वैकल्पिक हैं

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


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
2:09
2:59
02: 9
2:09
2: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 । अधिक जानकारी के लिए लिंक
पैदाम अहमदपुर

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

आप निम्नलिखित regex का उपयोग कर सकते हैं:

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

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

स्ट्रींग मैच रेगुलर एक्सप्रेशन के साथ मेल खाने पर यह तरीका "सही" है।


0

मनीष एम दंबलानी के योगदान के लिए थोड़ा सा संशोधन 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]))$

हैंडल: 4am 4 am 4:00 4:00 am 4:00 pm 4.30 am आदि।


1
AM|am|aM|Am|PM|pm|pM|Pm=[AaPp][Mm]
एड मॉर्टन

0

नीचे रेगेक्स hh: mm प्रारूप को मान्य करने में मदद करेगा

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

-1

मेरा है:

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

यह बहुत कम है

कई उदाहरणों के साथ इसका परीक्षण किया गया

मिलान करें:

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

और 25:76 आदि जैसे किसी भी अमान्य उदाहरण से मेल नहीं खाता ...


09:30मैच मत करो
ग्रीन

आपके अपने उदाहरण 00:00 और 07:43 मेल नहीं खा रहे हैं।
क्रिस्टियान वेस्टरबेक

-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

इस मास्टरफुल टाइमस्टैम्प डिटेक्टर रेगेक्स की जाँच करें जिसे मैंने एक उपयोगकर्ता-निर्दिष्ट टाइमस्टैम्प की तलाश में बनाया था, इसके पिकअप में क्या शामिल होगा, इसके उदाहरण हैं, लेकिन निश्चित रूप से यह सीमित नहीं है;

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.... मैं इसे देख भी नहीं सकता ...: - /
मार्टिन Tournoij

-3

निम्नलिखित का प्रयास करें

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

नोट: मैं जावास्क्रिप्ट रेगेक्स इंजन मान रहा था। अगर यह इससे अलग है तो कृपया मुझे बताएं।


-3

आप regex का उपयोग कर सकते हैं:

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

मेरे द्वारा किया गया केवल संशोधन ही सबसे अधिक अंक वाला वैकल्पिक है। रेगेक्स का बाकी हिस्सा समान है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.