Saya perlu memvalidasi string tanggal untuk format dd/mm/yyyy
dengan ekspresi reguler.
Regex ini memvalidasi dd/mm/yyyy
, tetapi bukan tanggal yang tidak valid seperti 31/02/4500
:
^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$
Apa itu regex yang valid untuk memvalidasi dd/mm/yyyy
format dengan dukungan tahun kabisat?
pattern
yang mengambil ekspresi reguler, dan browser memvalidasi secara otomatis terhadap regex tanpa menggunakan javascript sama sekali. Hanya dengan menetapkan regex pada atribut pola!Jawaban:
Regex yang Anda tempelkan tidak memvalidasi tahun kabisat dengan benar, tetapi ada yang tidak di pos yang sama . Saya memodifikasinya untuk diambil
dd/mm/yyyy
,dd-mm-yyyy
ataudd.mm.yyyy
.^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[13-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$
Saya mengujinya sedikit di tautan yang disediakan Arun dalam jawabannya dan juga di sini dan tampaknya berhasil.
Sunting 14 Februari 2019: Saya telah menghapus koma yang ada di regex yang memungkinkan tanggal seperti
29-0,-11
sumber
DD/MM/YYYY
, regex ini juga menerimaDD/MM/YY
yang saya tidak yakin dengan maksud awal poster. Jika Anda ingin tidak mendukung 'YY', maka hapus semua?
quantifiers opsional .0?
- masing dengan0
, dan juga hapus kejadian terakhir?
.?
yang harus dihapus: ganti semua(?:1[6-9]|[2-9]\d)?
dengan(?:1[6-9]|[2-9]\d)
.Saya telah memperpanjang regex yang diberikan oleh @Ofir Luzon untuk format dd-mmm-YYYY, dd / mmm / YYYY, dd.mmm.YYYY sesuai kebutuhan saya. Orang lain dengan persyaratan yang sama dapat merujuk ini
dan diuji untuk beberapa kasus uji di sini http://regexr.com/39tr1 .
Untuk pemahaman yang lebih baik untuk ekspresi Reguler ini merujuk gambar ini:
sumber
8888
adalah tahun yang memungkinkan. Saya berharap untuk hidup sampai usia itu.Memperhatikan:
Jadi itu berfungsi dengan baik hanya untuk [1901 - 2099] (Whew) 😊
hh / MM / tttt:
Cek apakah tahun kabisat. Tahun dari 1900 hingga 9999 adalah valid. Hanya dd / MM / tttt
sumber
29/02/2100
tidak ada (2100 BUKAN tahun kabisat), tetapi masih diterima oleh pola yang diberikan.coba ini.
Anda dapat menguji ekspresi reguler di http://www.regular-expressions.info/javascriptexample.html dengan mudah.
sumber
30-02-2001
... toh terima kasih atas jawabannya :)Saya menduga bahwa yang berikut ini seakurat yang dapat diharapkan tanpa mengetahui kapan lokal pengguna beralih dari Julian ke kalender Gregorian.
Ia menerima '-', '/', atau tidak sama sekali sebagai pemisah antara tahun, bulan, dan hari, terlepas dari urutannya.
MMddyyyy:
ddMMyyyy:
yyyyMMdd:
Selain pesanan, semua ini akurat untuk Kalender Julian (tahun kabisat setiap empat tahun) hingga 1700, ketika Kalender Gregorian menyimpang dari Julian. Ini memiliki dua masalah:
Ini telah diuji terhadap implementasi kalender Jawa dari tahun 0001 hingga tahun 9999 dengan satu-satunya perbedaan adalah 10 hari yang disebutkan di atas pada tahun 1582.
sumber
^([0-9]{4}[-/]?((0[13-9]|1[012])[-/]?(0[1-9]|[12][0-9]|30)|(0[13578]|1[02])[-/]?31|02[-/]?(0[1-9]|1[0-9]|2[0-8]))|([0-9]{2}(([2468][048]|[02468][48])|[13579][26])|([13579][26]|[02468][048])00)[-/]?02[-/]?29)$
. Diuji dengan python: repl.it/repls/DependentBestChaptersBagi mereka yang melihat ini dan benar-benar bingung, berikut adalah kutipan dari skrip saya. Sayangnya, yang dilakukannya hanyalah mencocokkan angka yang valid dalam input waktu tanggal, dan 31 Februari akan ditandai sebagai valid, tetapi seperti yang telah dikatakan banyak orang, regex sebenarnya bukan alat terbaik untuk melakukan tes ini.
Untuk mencocokkan tanggal dalam format 'yyyy-MM-dd hh: mm' (Atau memang dalam urutan apa pun yang Anda suka)
Script di atas dimulai dengan membangun objek regex. Kemudian menemukan semua input yang id-nya cocok dengan pola tertentu dan kemudian mengulanginya. Saya tidak menguji input pertama yang saya temukan (
if (e > 0)
).Sedikit penjelasan:
^
berarti awal pertandingan, sedangkan$
akhir pertandingan.\d+
berarti cocok dengan urutan bilangan bulat tunggal atau bersebelahan, jadimyhtml_element_with_id_56_datetime
danmyhtml_element_with_id_2_datetime
akan cocok, tetapimyhtml_element_with_id_5a_datetime
tidak akansumber
Berikut adalah versi lain dari regex yang cocok dengan salah satu format tanggal berikut dan memungkinkan nol di depan dihapus:
Regex:
^[0-3]?[0-9].[0-3]?[0-9].(?:[0-9]{2})?[0-9]{2}$
Cocok:
1/1/11 or 1.1.11 or 1-1-11 : true 01/01/11 or 01.01.11 or 01-01-11 : true 01/01/2011 or 01.01.2011 or 01-01-2011 : true 01/1/2011 or 01.1.2011 or 01-1-2011 : true 1/11/2011 or 1.11.2011 or 1-11-2011 : true 1/11/11 or 1.11.11 or 1-11-11 : true 11/1/11 or 11.1.11 or 11-1-11 : true
Demo Debuggex
sumber
13/13/2000
= Cocok adalah benarDi sini saya menulis satu untuk
dd/mm/yyyy
mana pemisah dapat menjadi salah satu-.,/
rentang tahun0000-9999
.Ini berhubungan dengan tahun kabisat dan dirancang untuk citarasa regex, yang mendukung tampilan kepala, menangkap kelompok dan referensi. TIDAK berlaku untuk seperti
d/m/yyyy
. Jika perlu, tambahkan pemisah lebih lanjut[-.,/]
Tes di regex101 ; sebagai string Java:
menjelaskan:
Juga lihat FAQ Regex SO ; Tolong beri tahu saya, jika gagal.
sumber
Menemukan reg ini di sini
Ini memvalidasi format
mm/dd/yyyy
dan tanggal yang valid dengan benar (tetapi tidakm/d/yyyy
).Beberapa tes
sumber
akan memvalidasi tanggal antara
1900-2099
sumber
Ungkapan berikut ini bagus dan mudah untuk dimanipulasi:
Ini memvalidasi sesuai dengan format MM / dd / YYYY dan memungkinkan dukungan tahun kabisat dari 1960 hingga 2016. Jika Anda memerlukan dukungan tahun kabisat Anda hanya perlu memanipulasi bagian ekspresi ini:
Semoga ini banyak membantu Anda
sumber
Jawaban lain yang memvalidasi hari (dd) tergantung pada bulan (mm) dan tahun (yyyy) (yaitu, juga memvalidasi Februari Feb di tahun kabisat) dan memungkinkan tahun mulai dari 0001 hingga 9999 (0000 pada tahun yang tidak valid menurut Gregorian kalender)
sumber
Saya bekerja dengan API yang hanya menerima format MM / DD / YYYY. Saya tidak dapat menemukan posting lain yang melakukan lompatan bertahun-tahun sebaik jawaban Ofir , jadi saya men-tweak dan mempostingnya kembali di sini untuk siapa saja yang mungkin membutuhkannya.
sumber
akan memvalidasi
MM/DD/YYYY
format dengan1960
ke2028
jika Anda perlu memperpanjang dukungan tahun kabisat maka tambahkan
ini juga bekerja
jika Anda dapat mengubah format yang
mm-dd-yyyy
dari ganti[/]
untuk[-]
juga memeriksa online http://regexr.com/sumber
Untuk tanggal MM / DD / YYYY dapat Anda gunakan
Ini memverifikasi hari dan ngengat yang tepat.
Ingatlah bahwa Anda dapat memeriksa ekspresi reguler Anda di
regex101
yang saya rekomendasikan :)
Selamat bersenang-senang!
sumber
regex ini akan memvalidasi tanggal dalam format:
12-30-2016 (mm-dd-yyyy) atau 12-3-2016 (mm-d-yyyy) atau 1-3-2016 (md-yyyy) atau 1-30-2016 (m-dd-yyyy)
sumber
Saya tahu ini adalah jawaban tangensial untuk pertanyaan itu, tetapi jika maksud pertanyaannya adalah 'bagaimana saya memvalidasi kencan?', Lalu mengapa tidak mencoba membiarkan bahasa pemrograman melakukan semua kerja keras (jika Anda menggunakan bahasa yang bisa)?
misalnya dalam php
sumber