SS: DD saat biçimini eşleştirmek için normal ifade


167

HH: MM formatında zaman eşleme için bir regexp istiyorum. İşte sahip olduğum şey ve işe yarıyor:

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

Bu, 00:00 ile 23:59 arasındaki her şeyle eşleşir.

Ancak, 0:00 ve 1:00, vs de 00:00 ve 01:30 ile eşleşecek şekilde değiştirmek istiyorum. Yani en soldaki basamağı isteğe bağlı yapmak, HH: MM ve H: MM'yi eşleştirmek.

Bu değişikliği nasıl yapacağınız hakkında bir fikriniz var mı? Javascript yanı sıra php çalışmak için bu gerekir.


15
Aslında orijinal normal ifadeniz geçerli tüm zaman değerleriyle eşleşmeyecektir, örneğin 17:00
David Clarke

Yanıtlar:


367

Orijinal normal ifadenizin kusurları vardır: 04:00örneğin eşleşmez .

Bu daha iyi olabilir:

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

46
Bu regExp, sıfır olmadan zaman içindir. Baştaki sıfır ile zaman için RegExp^([0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$
SergO

15
@SergO lütfen cevabını daha dikkatli okuyun. Cevabı hem önde gelen sıfır hem de sıfır için.
Alexander

11
Biraz daha kısa bir form^(?:\d|[01]\d|2[0-3]):[0-5]\d$
Billy Jo

2
C # 'da da güzel çalışıyor.
Richard Ev

10
@SergO böyle olmamalı ^ (0 [0-9] | 1 [0-9] | 2 [0-3]): [0-5] [0-9] $?
Martin

58

Zaman için Düzenli İfadeler

  • SS: 12 saatlik biçim, isteğe bağlı satır aralığı 0

    /^(0?[1-9]|1[0-2]):[0-5][0-9]\d$/
  • SS: 12 saatlik biçim, isteğe bağlı önde gelen 0, zorunlu reklamlar (AM / PM)

    /((1[0-2]|0?[1-9]):([0-5][0-9]) ?([AaPp][Mm]))/
  • SS: 24 saat önde, 0 önde

    /^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
  • SS: 24 saatlik MM biçimi, isteğe bağlı önde gelen 0

    /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
  • SS: DD: SS 24 saat biçimi ve baştaki 0

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

Referans ve Demo


4
Teşekkür ederim! Bu cevap en üstte olmalıdır.
Marc

Herhangi bir neden SS: 0 lider ile MM 24 saat değil ^([0-2][0-3]|[0-1][0-9]):[0-5][0-9]+$?
Vlad Macovei

Çünkü cevaptaki normal ifade iyi çalışıyor. Ve yorum yaptığınız da işe yarıyor. Her ikisini de kullanmaktan çekinmeyin. :)
Niket Pathak

Yukarıdaki regex ile 12 saat (am / pm ile) dizeleri eşleşen insanlar için, regex karşısında "13:00 PM" testinin (bazı değerler) true değerini döndüreceğini unutmayın (dizede "15:00" kısmı) geçerli. Aşağıdaki ifadeyi kullanarak sorunu çözdüm res = value.match (regex); if (res && res [0] === değer) doSomething ();
Taha Rehman Siddiqui

49

Yukarıdakilerin hiçbiri benim için çalışmadı. Sonunda kullandım:

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

Mantık:

İlk sayı (saat): 0 ile 19 arasında bir sayı -> [0-1]?[0-9](tek haneli sayıya izin verir)
veya
20 - 23 arasında bir sayı ->2[0-3]

ikinci sayı (dakika) her zaman 00 ile 59 arasında bir sayıdır -> [0-5][0-9](tek bir basamağa izin verilmez)


8
İlk köşeli parantez içinde çizgiye ihtiyacınız yok, aynı şekilde [01]çalışıyor;)
Çeknoloji

3
İşte bu cevap sadece 12 saatlik zamanı (isteğe bağlı ^(0?[1-9]|1[0-2]):[0-5][0-9]$
baştaki

^([0-1][0-9]|2[0-3]):[0-5][0-9]$başa sıfır zorlamak
Manan Mehta

8

Bunu 24H kullanabilirsiniz, saniye isteğe bağlıdır

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

4

En iyisi, herhangi bir risk almadan HH: MM için olacaktır.

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

bu kısaltılabilir ^([0-1]\d|2[0-3]):[0-5]\d$mi?
AlbinoDrought

3

Şaşırtıcı bir şekilde aslında tüm bunların tam olarak örtülmediğini gördüm, çünkü 0: 0 gece yarısı daha kısa format için çalışmıyorlar ve birkaç 00:00 için de çalışmıyor, aşağıdakileri kullandım ve test ettim:

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

2

Bu normal ifadeyi kullanabilirsiniz:

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

00: 00'ı hariç tutmak istiyorsanız, bu ifadeyi kullanabilirsiniz

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

Geçerli ifade 00:01 ila 00:59 veya 0:01 ila 23:59 olduğu için ikinci ifade daha iyi bir seçenektir. İhtiyacınız üzerine bunlardan herhangi birini kullanabilirsiniz. Regex101 bağlantısı


İlk ifade 00: 05 değerini kabul etmez . Ama teşekkürler. Beni aradığım doğrulamaya götürür.
JazZ

2

Maçlar:

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

Kullanın:

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

2: 9 veya 02: 9 ne tür bir zaman?
vs97

örneğin C # 'da DateTime nesnesini dizeye dönüştürmek için pek çok seçenek vardır. DateTime date1 = new DateTime(2008, 1, 1, 6, 9, 1); Console.WriteLine(date1.ToString("H:mm:ss", CultureInfo.InvariantCulture)); // Displays 6:09:01 . Daha fazla bilgi için bağlantıya
Pedram Ahmadpour

1

En soldaki isteğe bağlı en çok sorduğunuz gibi, en soldaki ve en sağdaki en biti de yaptım, kontrol et

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

İle eşleşir

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

Canlı bağlantıya buradan ulaşabilirsiniz


0

Aşağıdaki normal ifadeyi kullanabilirsiniz:

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

0

Bildirmek

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

Dize Normal İfade ile eşleştiğinde bu yöntem "true" değerini döndürür.


0

Manish M Demblani'nin yukarıdaki katkısı 4 am üzerinde küçük bir değişiklik (Uygulamamda ihtiyaç duymadığım için saniye bölümünden kurtuldum)

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

kolları: 04:00 04:00 04:00 16:00 4.30 vb.


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

0

Aşağıdaki normal ifade ss: dd biçimini doğrulamaya yardımcı olacaktır

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

-1

Benimki:

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

Bu çok daha kısa

Birkaç örnekle test ettirdim

Eşleşme:

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

Ve 25:76 vb. Gibi geçersiz bir eşleşmeyle eşleşmiyor ...


09:30uyuşmuyor
Yeşil

Kendi örnekleriniz 00:00 ve 07:43 eşleşmiyor.
Christiaan Westerbeek

-1

Aşağıdakileri deneyebilirsiniz

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

Aşağıdaki desenleri algılayabilir:

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

Kullanıcı tarafından belirlenen bir zaman damgasını aramak için oluşturduğum bu maskeli zaman damgası dedektörü normal ifadesini kontrol edin .

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

Ayrıca, zamanlar rakam içerdiği sürece çok daha fazla toplanır


1
RegExr requires a modern browser. Please update your browser to the latest version and try again.... göremiyorum bile ...: - /
Martin Tournoij

-3

Takip etmeyi dene

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

Not: Javascript normal ifade motorunu varsayıyordum. Bundan farklıysa lütfen bana bildirin.


-3

Aşağıdaki normal ifadeyi kullanabilirsiniz:

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

Sadece yaptığım değişiklik en soldaki rakam isteğe bağlıdır. Normal ifadenin geri kalanı aynı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.