Cek Pattern Input Tanggal di PHP Menggunakan fungsi Preg_Match

Setelah sekian lama vakum menulis di blog karna kesibukan Skripsweet 😂😂😂, kali ini sy akan berbagi tips bagaimana cara cek inputan tanggal di PHP menggunakan fungsi
preg_match(pattern, subject).....

Kenapa sih harus melakukan cek inputan tanggal dulu??...

Terkadang kita menemukan suatu permasalahan ketika proses penginputan data berupa tanggal melalui media file excel, seringkali pattern nya berbeda" tiap komputer apalagi antar Operating System (OS). Sy ambil contoh seperti berikut ini :

  1. 2020-10-30 (yyyy-mm-dd)
  2. 2020/10/30 (yyyy/mm/dd)
  3. 30-10-2020 (dd-mm-yyyy)
  4. 10-30-2020 (mm-dd-yyyy)
  5. 30/10/2020 (dd/mm/yyyy)
  6. 10/30/2020 (mm/dd/yyyy)
Dari inputan tanggal 30 Oktober 2020 tersebut, terdapat berbagai macam pattern yg digunakan dan masih sangat banyak lagi jenis pattern lainnya, silahkan kalian pelajari pattern apa saja yg di support di sini.

Langsung saja buka kode editor kalian,

kita buat function format_date($tgl) biar nanti tinggal manggil-manggil function nya saja ngk nulis panjang-panjang.

1. Untuk pattern yyyy-mm-dd
/^((((19|[2-9]\d)\d{2})\-(0[13578]|1[02])\-(0[1-9]|[12]\d|3[01]))|(((19|[2-9]\d)\d{2})\-(0[13456789]|1[012])\-(0[1-9]|[12]\d|30))|(((19|[2-9]\d)\d{2})\-02\-(0[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))\-02\-29))$/
2. Untuk pattern yyyy/mm/dd
/^((((19|[2-9]\d)\d{2})\/(0[13578]|1[02])\/(0[1-9]|[12]\d|3[01]))|(((19|[2-9]\d)\d{2})\/(0[13456789]|1[012])\/(0[1-9]|[12]\d|30))|(((19|[2-9]\d)\d{2})\/02\/(0[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))\/02\/29))$/
3. Untuk pattern dd-mm-yyyy
 /^(((0[1-9]|[12]\d|3[01])\-(0[13578]|1[02])\-((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\-(0[13456789]|1[012])\-((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\-02\-((19|[2-9]\d)\d{2}))|(29\-02\-((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/
4. Untuk pattern mm-dd-yyyy
/^(((0[13578]|1[02])\-(0[1-9]|[12]\d|3[01])\-((19|[2-9]\d)\d{2}))|((0[13456789]|1[012])\-(0[1-9]|[12]\d|30)\-((19|[2-9]\d)\d{2}))|(02\-(0[1-9]|1\d|2[0-8])\-((19|[2-9]\d)\d{2}))|(02\-29\-((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/
5. Untuk pattern dd/mm/yyyy
/^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/
6. Untuk pattern mm/dd/yyyy
/^(((0[13578]|1[02])\/(0[1-9]|[12]\d|3[01])\/((19|[2-9]\d)\d{2}))|((0[13456789]|1[012])\/(0[1-9]|[12]\d|30)\/((19|[2-9]\d)\d{2}))|(02\/(0[1-9]|1\d|2[0-8])\/((19|[2-9]\d)\d{2}))|(02\/29\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/

Pastinya kalian masih bingung cara implementasi syntax pattern tersebut,  silahkan kalian copy paste pattern tersebut seperti berikut ini :



Di situ, silahkan kalian custom kondisi jika terpenuhi mau diapakan, pada contoh tersebut sy berniat mengembalikan 2 buah data dengan memasukkannya ke dalam array.
kemudian melakukan return $data untuk mengembalikan hasil array ke pemanggil function

Kemudian ayo kita ujicoba, silahkan ikuti dulu contoh yg sy berikan di bawah ini, nanti silahkan kalian kembangkan sendiri sesuai studi kasus yg kalian hadapi


Lalu coba kita running di browser, hasilnya sudah sesuai dgn return value apa ada error 
Dan hasilnya sudah sesuai dengan inputan yg telah kita masukkan secara manual tadi. Sekarang kita coba implementasi dengan memasukkan / membaca file dari excel ke dalam aplikasi PHP kita.

File excel ini merupakan format inputan yg ada pada aplikasi PPDB Online sy, jadi formatnya sudah paten seperti ini, kalian bisa menggunakan format form kalian sendiri jika ingin uji coba menggunakan file excel.


Kemudian sy lakukan upload melalui fitur yg tersedia seperti berikut ini :


Nanti kita cek, sudah sesuai apa belum format penulisan tanggalnya, karena di database mysql secara default menggunakan pattern yyyy-mm-dd. Sedangkan php tidak dapat melakukan convert secara otomatis terhadap inputan tanggal dengan format pattern seperti dd-mm-yyyy dan lainnya, sehingga ketika di cek pada database, value tanggalnya berubah menjadi 0000-00-00


20012009 merupakan password dari tanggal lahir 20/01/2009 (Anisa Urbaningrum)
13012009 merupakan password dari tanggal lahir 13/01/2009 (Anton Urbaningrum)

Dengan kata lain function format_date($tgl) yg kita buat diatas telah berjalan dengan semesti nya.

Untuk penjelasan lebih detail dari pattern tersebut, silahkan mengakses ke stackoverflow 

Sekian tutorial cek Pattern inputan tanggal di PHP, silahkan komentar di bawah jika ada penjelasan yg kurang jelas pada seri kali ini.


Terima kasih... ðŸ˜„ 
 

Artikel Terkait

Saya seorang yg bercita-cita menjadi pebisnis aplikasi ternama di Indonesia


EmoticonEmoticon