Belajar Laravel: Validasi nomor telpon dengan package Propaganistas

Validasi nomor telpon sebenarnya susah susah mudah. Sebelum membahas susah susah mudahnya itu ada baiknya kenapa kita perlu melakukan validasi terhadap nomor telpon yang kadang perlu dilakukan di aplikasi yang kita buat.

Validasi data di beberapa tempat

Tujuan validasi adalah untuk mendapatkan data yang sesuai dengan format atau isi yang dikehendaki. Jika format atau isi data tidak sesuai ada kemungkinan nanti kedepan terdapat error yang muncul karena beberapa proses gagal dilakukan karena data tidak sesuai.

Validasi ini di dunia web itu ada 2 tempat pada umumnya. Pertama di sisi frontend, validasi ini dilakukan di sisi Javascript. Sebelum data masuk ke backend, validasi dilakukan terlebih dahulu di sisi javascript.

Validasi kedua ada di sisi backend. Temen-temen yang menggunakan Laravel sebagai backend tentu mengetahui Framework Laravel juga menyediakan validasi terhadap request yang masuk.

Di Apps, Android atau IOS kadang biasanya menggunakan validasi juga sebelum mengakses API yang disediakan oleh backend.

Intinya adalah, kita berharap data yang masuk sesuai dengan yang kita inginkan. User tidak sembarang menginput data tapi kita arahkan user untuk menginput data sesuai dengan aplikasi.

Masalah Validasi Nomor Telpon

Masalah yang terjadi ketika user menginputkan data nomor telpon yaitu mereka menginput tanpa format yang standard. Jika buat input nomor telpon dengan format string saja. Di Indonesia pasti ada format yang ditulis oleh user seperti berikut ini:

  • +62 856 9538 6764
  • +6285695386764
  • +62856 9538 6764
  • +62856-9538-6764
  • 0856 9538 6764
  • 085895386764
  • 0856-9538-6764

Dan pasti temen-temen pernah lihat format selain diatas ya, karna ada mungkin nomor yang sama, jadi nomor yang tidak sama sengaja dipisahkan seperti:

  • 0857 591 035 00

Ketika nomor-nomor itu tidak divalidasi, lalu misalnya ada satu flow atau feature misalnya kasus:

  1. Feature sending SMS Verification untuk mengecek user tersebut benar dan aktif menggunakan nomor telpon tersebut atau tidak
  2. Feature untuk mengecek user yang mendapatkan diskon hanya user yang telah terdaftar dengan nomor telpon yang valid.

Ketika teman-teman memasukan begitu saja format diatas ke database, tentu akan menjadi masalah misalnya pada kasus pertama:

  1. Ada user yang iseng menggunakan nomor yang sama tapi mendaftar dengan lebih dari 1 akun.
  2. Feature sending SMS jadi mubazir karna mengirim sms verification lebih dari 1 kali padahal nomor yang diinput user iseng tersebut adalah sama

Pada kasus kedua, jika tidak di validasi dengan baik nomor telpon maka:

  1. Rencana company untuk memisahkan user yang aktif dan tidak aktif melalui nomor telpon jadi berantakan karna format validasi tidak diterapkan dengan baik.
  2. Diskon yang harusnya tepat sasaran tapi disalahgunakan oleh user iseng karna bermain dengan format nomor telpon yang bisa diakali.

Dari beberapa permasalahan yang saya sebut diatas, tidak mungkin dan tidak lain kita harus melakukan validasi terhadap nomor telpon yang user input.

Validasi Nomor Telpon dengan Package dari Propaganistas

Atas alasan diatas jadi kita perlu melakukan validasi terhadap nomor telpon di sisi backend. Pada Laravel kita tidak cukup baik menghandle validasi nomor telpon tersebut. Kita tentunya juga bisa melakukan regex pattern dari format input yang masuk dengan Laravel. Kebayang aja membuat regex pattern dari beberapa format diatas dan perlu diingat bagaimana jika aplikasi kita sudah go international? Tentu nomor telpon tiap negara pun jadi berbeda-beda formatnya bukan?

Dari situ saya ada pengalaman minta tolong ke bagian android / ios / frontend deveveloper untuk melakukan validasi nomor telpon tersebut. Saya juga meminta iso code dari tiap negara dikirimkan ketika user memasukan nomor telpon karena dengan iso code tersebut saya bisa melakukan validasi sehingga format nomor telpon menjadi seragam.

Seragam! ya benar seragam karna menggunakan package Propaganistas ini. Teman-teman bisa buka di link berikut ini: https://github.com/Propaganistas/Laravel-Phone

Cara penggunaan-nya cukup mudah, silahkan teman-teman install package tersebut ke dalam project laravel teman-teman:

composer require propaganistas/laravel-phone

Jika sudah, pada controller untuk menghandle validasi nomor telphone teman-teman tambahkan class dari propaganistas:

use Propaganistas\LaravelPhone\PhoneNumber;

Lakukan validasi terhadap nomor telpon seperti berikut ini:

public function store(Request $request)
{
    $isoCode = $request->iso_code;
    $phone = $request->phone;

    $data = [
        'phone' => $request->phone,
        'iso_code' => $request->iso_code
    ];

    $rules = [
        'iso_code' => 'required',
        'phone' => 'required|phone:'.$isoCode
    ];
    
    $validator = Validator::make($data, $rules);

    if ($validator->fails()) {
        return $validator->messages();
    }
    
    return PhoneNumber::make($phone, $isoCode);
}

Pada kode diatas, saya lakukan validasi dengan iso_code jadi syarat utama menggunakan package ini adalah dari sisi frontend atau mobile developer harus mengirim iso code. Lalu temen-temen bisa lihat pada bagian $rules ada sedikit perubahan seperti menambahkan key phone lalu diikuti dengan isoCode.

Rule tersebut otomatis terbaca oleh package propaganistas ini sehingga jika format nomor telpon berdasarkan iso code dari masing-masing negara yang tidak sesuai maka validasi gagal dan mengeluarkan message error.

Jika nomor telpon yang diinput oleh user sesuai maka kita format semua nomor menjadi format seperti +62xxxxxxxxxxx.

Format tersebut tanpa spasi, tanpa dash, dan format seluruhnya akan seragam sehingga dengan format seragam tersebut kita bisa pakai untuk berbagai tujuan validasi lainnya. User iseng tidak bisa lagi menuliskan sembarang nomor telpon.

Ada beberapa fungsi lain pada package tersebut, silahkan teman-teman lihat di link docs-nya ya.

Sampai disini semoga bisa bermanfaat. Temen-temen bisa bantu share tulisan ini.

Jika ada kesalahan atau koreksi atau mungkin ada pengalaman yang sama ketika melakukan validasi nomor telpon bisa komentar juga ya.

2 thoughts on “Belajar Laravel: Validasi nomor telpon dengan package Propaganistas”

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.