Cara memeriksa validator bidang yang diperlukan dalam javascript

Sebelum mengirimkan data ke server, penting untuk memastikan semua kontrol formulir yang diperlukan diisi, dalam format yang benar. Ini disebut validasi formulir sisi klien, dan membantu memastikan data yang dikirimkan cocok dengan persyaratan yang ditetapkan dalam berbagai kontrol formulir. Artikel ini memandu Anda melalui konsep dasar dan contoh validasi formulir sisi klien

Prasyarat. Literasi komputer, pemahaman yang wajar tentang HTML, CSS, dan JavaScript. Objektif. Untuk memahami apa itu validasi formulir sisi klien, mengapa itu penting, dan bagaimana menerapkan berbagai teknik untuk mengimplementasikannya

Validasi sisi klien adalah pemeriksaan awal dan fitur penting dari pengalaman pengguna yang baik; . Jika sampai ke server dan kemudian ditolak, penundaan yang terlihat disebabkan oleh perjalanan bolak-balik ke server dan kemudian kembali ke sisi klien untuk memberi tahu pengguna untuk memperbaiki data mereka

Namun, validasi sisi klien tidak boleh dianggap sebagai tindakan keamanan yang lengkap. Aplikasi Anda harus selalu melakukan pemeriksaan keamanan pada data yang dikirimkan formulir apa pun di sisi server dan juga sisi klien, karena validasi sisi klien terlalu mudah untuk dilewati, sehingga pengguna jahat masih dapat dengan mudah mengirim data buruk ke server Anda. Baca Keamanan situs web untuk mengetahui apa yang mungkin terjadi;

Buka situs populer mana pun dengan formulir pendaftaran, dan Anda akan melihat bahwa mereka memberikan umpan balik saat Anda tidak memasukkan data Anda dalam format yang mereka harapkan. Anda akan mendapatkan pesan seperti

  • "Bidang ini wajib diisi" (Anda tidak boleh mengosongkan bidang ini)
  • "Masukkan nomor telepon Anda dalam format xxx-xxxx" (Diperlukan format data tertentu agar dianggap valid)
  • "Silakan masukkan alamat email yang valid" (format data yang Anda masukkan tidak benar)
  • "Kata sandi Anda harus antara 8 dan 30 karakter dan berisi satu huruf besar, satu simbol, dan angka. " (Diperlukan format data yang sangat spesifik untuk data Anda)

Ini disebut validasi formulir. Saat Anda memasukkan data, browser dan/atau server web akan memeriksa apakah data dalam format yang benar dan dalam batasan yang ditetapkan oleh aplikasi. Validasi yang dilakukan di browser disebut validasi sisi klien, sedangkan validasi yang dilakukan di server disebut validasi sisi server. Dalam bab ini kami berfokus pada validasi sisi klien

Jika informasi diformat dengan benar, aplikasi memungkinkan data dikirimkan ke server dan (biasanya) disimpan dalam database;

Kami ingin mengisi formulir web semudah mungkin. Jadi mengapa kami bersikeras untuk memvalidasi formulir kami?

  • Kami ingin mendapatkan data yang tepat, dalam format yang tepat. Aplikasi kami tidak akan berfungsi dengan baik jika data pengguna kami disimpan dalam format yang salah, salah, atau dihilangkan sama sekali
  • Kami ingin melindungi data pengguna kami. Memaksa pengguna kami untuk memasukkan kata sandi yang aman memudahkan untuk melindungi informasi akun mereka
  • Kami ingin melindungi diri kami sendiri. Ada banyak cara pengguna jahat dapat menyalahgunakan formulir yang tidak dilindungi untuk merusak aplikasi. Lihat Keamanan situs web

    Peringatan. Jangan pernah mempercayai data yang dikirimkan ke server Anda dari klien. Bahkan jika formulir Anda divalidasi dengan benar dan mencegah input yang salah di sisi klien, pengguna jahat masih dapat mengubah permintaan jaringan

Ada dua jenis validasi sisi klien yang akan Anda temui di web

  • Validasi formulir bawaan menggunakan fitur validasi formulir HTML, yang telah kita bahas di banyak tempat di seluruh modul ini. Validasi ini umumnya tidak memerlukan banyak JavaScript. Validasi formulir bawaan memiliki kinerja yang lebih baik daripada JavaScript, tetapi tidak dapat disesuaikan seperti validasi JavaScript
  • Validasi JavaScript dikodekan menggunakan JavaScript. Validasi ini sepenuhnya dapat disesuaikan, tetapi Anda harus membuat semuanya (atau menggunakan pustaka)

Salah satu fitur terpenting dari kontrol formulir modern adalah kemampuan untuk memvalidasi sebagian besar data pengguna tanpa bergantung pada JavaScript. Ini dilakukan dengan menggunakan atribut validasi pada elemen formulir. Kami telah melihat banyak dari ini di awal kursus, tetapi untuk rekap

  • input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    _8. Menentukan apakah bidang formulir perlu diisi sebelum formulir dapat dikirimkan
  • input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    9 dan
    <form>
      <label for="choose">Would you prefer a banana or cherry? (required)</label>
      <input id="choose" name="i-like" required />
      <button>Submit</button>
    </form>
    
    0. Menentukan panjang minimum dan maksimum data tekstual (string)
  • <form>
      <label for="choose">Would you prefer a banana or cherry? (required)</label>
      <input id="choose" name="i-like" required />
      <button>Submit</button>
    </form>
    
    1 dan
    <form>
      <label for="choose">Would you prefer a banana or cherry? (required)</label>
      <input id="choose" name="i-like" required />
      <button>Submit</button>
    </form>
    
    2. Menentukan nilai minimum dan maksimum dari jenis input numerik
  • <form>
      <label for="choose">Would you prefer a banana or cherry? (required)</label>
      <input id="choose" name="i-like" required />
      <button>Submit</button>
    </form>
    
    _3. Menentukan apakah data harus berupa angka, alamat email, atau jenis prasetel tertentu lainnya
  • <form>
      <label for="choose">Would you prefer a banana or cherry? (required)</label>
      <input id="choose" name="i-like" required />
      <button>Submit</button>
    </form>
    
    _4. Menentukan ekspresi reguler yang menentukan pola yang harus diikuti oleh data yang dimasukkan

Jika data yang dimasukkan dalam kolom formulir mengikuti semua aturan yang ditentukan oleh atribut di atas, maka dianggap valid. Jika tidak, maka dianggap tidak sah

Ketika suatu elemen valid, hal-hal berikut ini benar

  • Elemen cocok dengan pseudo-class
    <form>
      <label for="choose">Would you prefer a banana or cherry? (required)</label>
      <input id="choose" name="i-like" required />
      <button>Submit</button>
    </form>
    
    5 CSS, yang memungkinkan Anda menerapkan gaya tertentu ke elemen yang valid
  • Jika pengguna mencoba mengirim data, browser akan mengirimkan formulir, asalkan tidak ada lagi yang menghentikannya (mis. g. , JavaScript)

Ketika suatu elemen tidak valid, hal-hal berikut ini benar

  • Elemen ini cocok dengan kelas semu
    <form>
      <label for="choose">Would you prefer a banana or cherry? (required)</label>
      <input id="choose" name="i-like" required />
      <button>Submit</button>
    </form>
    
    6 CSS, dan terkadang kelas semu UI lainnya (mis. g. ,
    <form>
      <label for="choose">Would you prefer a banana or cherry? (required)</label>
      <input id="choose" name="i-like" required />
      <button>Submit</button>
    </form>
    
    7) bergantung pada kesalahan, yang memungkinkan Anda menerapkan gaya tertentu ke elemen yang tidak valid
  • Jika pengguna mencoba mengirim data, browser akan memblokir formulir dan menampilkan pesan kesalahan

Catatan. Ada beberapa kesalahan yang akan mencegah pengiriman formulir, termasuk

<form>
  <label for="choose">Would you prefer a banana or cherry? (required)</label>
  <input id="choose" name="i-like" required />
  <button>Submit</button>
</form>
8,
<form>
  <label for="choose">Would you prefer a banana or cherry? (required)</label>
  <input id="choose" name="i-like" required />
  <button>Submit</button>
</form>
9,
input:invalid {
  border: 2px dashed red;
}

input:invalid:required {
  background-image: linear-gradient(to right, pink, lightgreen);
}

input:valid {
  border: 2px solid black;
}
0 atau
input:invalid {
  border: 2px dashed red;
}

input:invalid:required {
  background-image: linear-gradient(to right, pink, lightgreen);
}

input:valid {
  border: 2px solid black;
}
_1,
input:invalid {
  border: 2px dashed red;
}

input:invalid:required {
  background-image: linear-gradient(to right, pink, lightgreen);
}

input:valid {
  border: 2px solid black;
}
2,
input:invalid {
  border: 2px dashed red;
}

input:invalid:required {
  background-image: linear-gradient(to right, pink, lightgreen);
}

input:valid {
  border: 2px solid black;
}
3 atau
input:invalid {
  border: 2px dashed red;
}

input:invalid:required {
  background-image: linear-gradient(to right, pink, lightgreen);
}

input:valid {
  border: 2px solid black;
}
4,
input:invalid {
  border: 2px dashed red;
}

input:invalid:required {
  background-image: linear-gradient(to right, pink, lightgreen);
}

input:valid {
  border: 2px solid black;
}
5,
input:invalid {
  border: 2px dashed red;
}

input:invalid:required {
  background-image: linear-gradient(to right, pink, lightgreen);
}

input:valid {
  border: 2px solid black;
}
12_______

Di bagian ini, kita akan menguji beberapa atribut yang telah kita bahas di atas

Mari kita mulai dengan contoh sederhana. masukan yang memungkinkan Anda untuk memilih apakah Anda lebih suka pisang atau ceri. Contoh ini melibatkan teks sederhana

input:invalid {
  border: 2px dashed red;
}

input:invalid:required {
  background-image: linear-gradient(to right, pink, lightgreen);
}

input:valid {
  border: 2px solid black;
}
_8 dengan
input:invalid {
  border: 2px dashed red;
}

input:invalid:required {
  background-image: linear-gradient(to right, pink, lightgreen);
}

input:valid {
  border: 2px solid black;
}
9 terkait dan kiriman
<form>
  <label for="choose">Would you prefer a banana or a cherry?</label>
  <input id="choose" name="i-like" required pattern="[Bb]anana|[Cc]herry" />
  <button>Submit</button>
</form>
0. Temukan kode sumber di GitHub di awal buah. html dan contoh langsung di bawah ini

<form>
  <label for="choose">Would you prefer a banana or cherry?</label>
  <input id="choose" name="i-like" />
  <button>Submit</button>
</form>

input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}

Untuk memulai, buat salinan

<form>
  <label for="choose">Would you prefer a banana or a cherry?</label>
  <input id="choose" name="i-like" required pattern="[Bb]anana|[Cc]herry" />
  <button>Submit</button>
</form>
_1 di direktori baru di hard drive Anda

Fitur validasi HTML yang paling sederhana adalah atribut

input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
8. Untuk membuat input wajib, tambahkan atribut ini ke elemen. Saat atribut ini disetel, elemen cocok dengan kelas semu ________22______3 UI dan formulir tidak akan dikirim, menampilkan pesan kesalahan saat pengiriman saat input kosong. Saat kosong, input juga akan dianggap tidak valid, cocok dengan pseudo-class
<form>
  <label for="choose">Would you prefer a banana or cherry? (required)</label>
  <input id="choose" name="i-like" required />
  <button>Submit</button>
</form>
6 UI

Tambahkan atribut

input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
8 ke input Anda, seperti yang ditunjukkan di bawah ini

<form>
  <label for="choose">Would you prefer a banana or cherry? (required)</label>
  <input id="choose" name="i-like" required />
  <button>Submit</button>
</form>

Perhatikan CSS yang disertakan dalam file contoh

input:invalid {
  border: 2px dashed red;
}

input:invalid:required {
  background-image: linear-gradient(to right, pink, lightgreen);
}

input:valid {
  border: 2px solid black;
}

CSS ini menyebabkan input memiliki batas putus-putus merah saat tidak valid dan batas hitam pekat yang lebih halus saat valid. Kami juga menambahkan gradien latar belakang saat input diperlukan dan tidak valid. Cobalah perilaku baru dalam contoh di bawah ini

Catatan. Anda dapat menemukan contoh ini langsung di GitHub sebagai validasi buah. html. Lihat juga kode sumbernya

Coba kirimkan formulir tanpa nilai. Perhatikan bagaimana input yang tidak valid mendapat fokus, pesan kesalahan default ("Silakan isi kolom ini") muncul, dan formulir dicegah untuk dikirim

Kehadiran atribut

input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
_8 pada elemen apa pun yang mendukung atribut ini berarti elemen tersebut cocok dengan pseudo-class
<form>
  <label for="choose">Would you prefer a banana or a cherry?</label>
  <input id="choose" name="i-like" required pattern="[Bb]anana|[Cc]herry" />
  <button>Submit</button>
</form>
3 apakah itu memiliki nilai atau tidak. Jika
input:invalid {
  border: 2px dashed red;
}

input:invalid:required {
  background-image: linear-gradient(to right, pink, lightgreen);
}

input:valid {
  border: 2px solid black;
}
_8 tidak memiliki nilai,
<form>
  <label for="choose">Would you prefer a banana or a cherry?</label>
  <input id="choose" name="i-like" required pattern="[Bb]anana|[Cc]herry" />
  <button>Submit</button>
</form>
9 akan cocok dengan pseudo-class
<form>
  <label for="choose">Would you prefer a banana or cherry? (required)</label>
  <input id="choose" name="i-like" required />
  <button>Submit</button>
</form>
6

Catatan. Untuk pengalaman pengguna yang baik, beri tahu pengguna kapan bidang formulir diperlukan. Ini bukan hanya pengalaman pengguna yang baik, tetapi juga diwajibkan oleh pedoman aksesibilitas WCAG. Juga, hanya minta pengguna untuk memasukkan data yang benar-benar Anda butuhkan. Misalnya, mengapa Anda benar-benar perlu mengetahui jenis kelamin atau gelar seseorang?

Fitur validasi berguna lainnya adalah atribut

<form>
  <label for="choose">Would you prefer a banana or cherry? (required)</label>
  <input id="choose" name="i-like" required />
  <button>Submit</button>
</form>
_4 , yang mengharapkan Ekspresi Reguler sebagai nilainya. Ekspresi reguler (regex) adalah pola yang dapat digunakan untuk mencocokkan kombinasi karakter dalam string teks, sehingga regexp ideal untuk validasi formulir dan melayani berbagai kegunaan lain dalam JavaScript

Regexp cukup rumit, dan kami tidak bermaksud untuk mengajari Anda secara mendalam di artikel ini. Di bawah ini adalah beberapa contoh untuk memberi Anda ide dasar tentang cara kerjanya

  • input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    2 — Mencocokkan satu karakter yaitu
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    2 (bukan
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    4, bukan
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    5, dan seterusnya)
  • input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    6 — Kecocokan
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    2, diikuti oleh
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    4, diikuti oleh
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    9
  • <form>
      <div>
        <label for="choose">Would you prefer a banana or a cherry?</label>
        <input
          type="text"
          id="choose"
          name="i-like"
          required
          minlength="6"
          maxlength="6" />
      </div>
      <div>
        <label for="number">How many would you like?</label>
        <input type="number" id="number" name="amount" value="1" min="1" max="10" />
      </div>
      <div>
        <button>Submit</button>
      </div>
    </form>
    
    0 — Kecocokan
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    2, secara opsional diikuti oleh satu
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    4, diikuti oleh
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    9. (
    <form>
      <div>
        <label for="choose">Would you prefer a banana or a cherry?</label>
        <input
          type="text"
          id="choose"
          name="i-like"
          required
          minlength="6"
          maxlength="6" />
      </div>
      <div>
        <label for="number">How many would you like?</label>
        <input type="number" id="number" name="amount" value="1" min="1" max="10" />
      </div>
      <div>
        <button>Submit</button>
      </div>
    </form>
    
    _4 atau
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    6)
  • <form>
      <div>
        <label for="choose">Would you prefer a banana or a cherry?</label>
        <input
          type="text"
          id="choose"
          name="i-like"
          required
          minlength="6"
          maxlength="6" />
      </div>
      <div>
        <label for="number">How many would you like?</label>
        <input type="number" id="number" name="amount" value="1" min="1" max="10" />
      </div>
      <div>
        <button>Submit</button>
      </div>
    </form>
    
    6 — Kecocokan
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    2, secara opsional diikuti oleh sejumlah
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    4s, diikuti oleh
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    9. (
    <form>
      <div>
        <label for="choose">Would you prefer a banana or a cherry?</label>
        <input
          type="text"
          id="choose"
          name="i-like"
          required
          minlength="6"
          maxlength="6" />
      </div>
      <div>
        <label for="number">How many would you like?</label>
        <input type="number" id="number" name="amount" value="1" min="1" max="10" />
      </div>
      <div>
        <button>Submit</button>
      </div>
    </form>
    
    4,
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    6,
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    div {
      margin-bottom: 10px;
    }
    
    2, dan seterusnya)
  • input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    div {
      margin-bottom: 10px;
    }
    
    3 — Mencocokkan satu karakter yaitu
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    2 atau
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    4
  • input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    div {
      margin-bottom: 10px;
    }
    
    6 — Sama persis dengan
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    6 atau persis
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    div {
      margin-bottom: 10px;
    }
    
    8 (tetapi tidak
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    div {
      margin-bottom: 10px;
    }
    
    9 atau
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    2 atau
    <form>
      <p>
        <fieldset>
          <legend>Do you have a driver's license?<span aria-label="required">*</span></legend>
          <!-- While only one radio button in a same-named group can be selected at a time,
               and therefore only one radio button in a same-named group having the "required"
               attribute suffices in making a selection a requirement -->
          <input type="radio" required name="driver" id="r1" value="yes"><label for="r1">Yes</label>
          <input type="radio" required name="driver" id="r2" value="no"><label for="r2">No</label>
        </fieldset>
      </p>
      <p>
        <label for="n1">How old are you?</label>
        <!-- The pattern attribute can act as a fallback for browsers which
             don't implement the number input type but support the pattern attribute.
             Please note that browsers that support the pattern attribute will make it
             fail silently when used with a number field.
             Its usage here acts only as a fallback -->
        <input type="number" min="12" max="120" step="1" id="n1" name="age"
               pattern="\d+">
      </p>
      <p>
        <label for="t1">What's your favorite fruit?<span aria-label="required">*</span></label>
        <input type="text" id="t1" name="fruit" list="l1" required
               pattern="[Bb]anana|[Cc]herry|[Aa]pple|[Ss]trawberry|[Ll]emon|[Oo]range">
        <datalist id="l1">
          <option>Banana</option>
          <option>Cherry</option>
          <option>Apple</option>
          <option>Strawberry</option>
          <option>Lemon</option>
          <option>Orange</option>
        </datalist>
      </p>
      <p>
        <label for="t2">What's your email address?</label>
        <input type="email" id="t2" name="email">
      </p>
      <p>
        <label for="t3">Leave a short message</label>
        <textarea id="t3" name="msg" maxlength="140" rows="5"></textarea>
      </p>
      <p>
        <button>Submit</button>
      </p>
    </form>
    
    1, dan seterusnya)

Masih banyak lagi kemungkinan yang tidak kami bahas di sini. Untuk daftar lengkap dan banyak contoh, lihat dokumentasi Ekspresi reguler kami

Mari kita terapkan sebuah contoh. Perbarui HTML Anda untuk menambahkan atribut

<form>
  <label for="choose">Would you prefer a banana or cherry? (required)</label>
  <input id="choose" name="i-like" required />
  <button>Submit</button>
</form>
_4 seperti ini

<form>
  <label for="choose">Would you prefer a banana or a cherry?</label>
  <input id="choose" name="i-like" required pattern="[Bb]anana|[Cc]herry" />
  <button>Submit</button>
</form>

input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}

Ini memberi kami pembaruan berikut — cobalah

Catatan. Anda dapat menemukan contoh ini langsung di GitHub sebagai pola buah. html (lihat juga kode sumber. )

Dalam contoh ini, elemen

input:invalid {
  border: 2px dashed red;
}

input:invalid:required {
  background-image: linear-gradient(to right, pink, lightgreen);
}

input:valid {
  border: 2px solid black;
}
_8 menerima salah satu dari empat kemungkinan nilai. string "banana", "Banana", "cherry", atau "Cherry". Ekspresi reguler peka terhadap huruf besar-kecil, tetapi kami telah membuatnya mendukung versi huruf besar dan huruf kecil menggunakan pola "Aa" tambahan yang bersarang di dalam tanda kurung siku

Pada titik ini, coba ubah nilai di dalam atribut

<form>
  <label for="choose">Would you prefer a banana or cherry? (required)</label>
  <input id="choose" name="i-like" required />
  <button>Submit</button>
</form>
4 menjadi sama dengan beberapa contoh yang Anda lihat sebelumnya, dan lihat bagaimana pengaruhnya terhadap nilai yang dapat Anda masukkan untuk membuat nilai input valid. Cobalah menulis sendiri, dan lihat bagaimana kelanjutannya. Jadikan mereka terkait dengan buah jika memungkinkan sehingga contoh Anda masuk akal

Jika nilai tidak kosong dari

input:invalid {
  border: 2px dashed red;
}

input:invalid:required {
  background-image: linear-gradient(to right, pink, lightgreen);
}

input:valid {
  border: 2px solid black;
}
_8 tidak cocok dengan pola ekspresi reguler,
<form>
  <label for="choose">Would you prefer a banana or a cherry?</label>
  <input id="choose" name="i-like" required pattern="[Bb]anana|[Cc]herry" />
  <button>Submit</button>
</form>
9 akan cocok dengan kelas semu
<form>
  <label for="choose">Would you prefer a banana or cherry? (required)</label>
  <input id="choose" name="i-like" required />
  <button>Submit</button>
</form>
6

Catatan. Beberapa tipe elemen

input:invalid {
  border: 2px dashed red;
}

input:invalid:required {
  background-image: linear-gradient(to right, pink, lightgreen);
}

input:valid {
  border: 2px solid black;
}
_8 tidak memerlukan atribut
<form>
  <label for="choose">Would you prefer a banana or cherry? (required)</label>
  <input id="choose" name="i-like" required />
  <button>Submit</button>
</form>
4 untuk divalidasi terhadap ekspresi reguler. Menentukan jenis
form {
  font: 1em sans-serif;
  max-width: 320px;
}

p > label {
  display: block;
}

input[type="text"],
input[type="email"],
input[type="number"],
textarea,
fieldset {
  width: 100%;
  border: 1px solid #333;
  box-sizing: border-box;
}

input:invalid {
  box-shadow: 0 0 5px 1px red;
}

input:focus:invalid {
  box-shadow: none;
}
_0, misalnya, akan memvalidasi nilai input terhadap pola alamat email yang terbentuk dengan baik atau pola yang cocok dengan daftar alamat email yang dipisahkan koma jika memiliki atribut
form {
  font: 1em sans-serif;
  max-width: 320px;
}

p > label {
  display: block;
}

input[type="text"],
input[type="email"],
input[type="number"],
textarea,
fieldset {
  width: 100%;
  border: 1px solid #333;
  box-sizing: border-box;
}

input:invalid {
  box-shadow: 0 0 5px 1px red;
}

input:focus:invalid {
  box-shadow: none;
}
1

Catatan. Elemen

form {
  font: 1em sans-serif;
  max-width: 320px;
}

p > label {
  display: block;
}

input[type="text"],
input[type="email"],
input[type="number"],
textarea,
fieldset {
  width: 100%;
  border: 1px solid #333;
  box-sizing: border-box;
}

input:invalid {
  box-shadow: 0 0 5px 1px red;
}

input:focus:invalid {
  box-shadow: none;
}
2 tidak mendukung atribut
<form>
  <label for="choose">Would you prefer a banana or cherry? (required)</label>
  <input id="choose" name="i-like" required />
  <button>Submit</button>
</form>
4

Anda dapat membatasi panjang karakter semua bidang teks yang dibuat oleh

input:invalid {
  border: 2px dashed red;
}

input:invalid:required {
  background-image: linear-gradient(to right, pink, lightgreen);
}

input:valid {
  border: 2px solid black;
}
8 atau
form {
  font: 1em sans-serif;
  max-width: 320px;
}

p > label {
  display: block;
}

input[type="text"],
input[type="email"],
input[type="number"],
textarea,
fieldset {
  width: 100%;
  border: 1px solid #333;
  box-sizing: border-box;
}

input:invalid {
  box-shadow: 0 0 5px 1px red;
}

input:focus:invalid {
  box-shadow: none;
}
2 dengan menggunakan atribut
input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
9 dan
<form>
  <label for="choose">Would you prefer a banana or cherry? (required)</label>
  <input id="choose" name="i-like" required />
  <button>Submit</button>
</form>
0. Bidang tidak valid jika memiliki nilai dan nilai tersebut memiliki karakter lebih sedikit dari nilai
input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
9 atau lebih dari nilai
<form>
  <label for="choose">Would you prefer a banana or cherry? (required)</label>
  <input id="choose" name="i-like" required />
  <button>Submit</button>
</form>
0

Peramban sering kali tidak mengizinkan pengguna mengetik nilai yang lebih panjang dari yang diharapkan ke dalam bidang teks. Pengalaman pengguna yang lebih baik daripada hanya menggunakan

<form>
  <label for="choose">Would you prefer a banana or cherry? (required)</label>
  <input id="choose" name="i-like" required />
  <button>Submit</button>
</form>
_0 juga memberikan umpan balik jumlah karakter dengan cara yang dapat diakses dan membiarkan mereka mengedit konten mereka sesuai ukuran. Contohnya adalah batas karakter yang terlihat di Twitter saat menge-Tweet. JavaScript, termasuk solusi yang menggunakan
<form>
  <label for="choose">Would you prefer a banana or cherry? (required)</label>
  <input id="choose" name="i-like" required />
  <button>Submit</button>
</form>
_0, dapat digunakan untuk menyediakan ini

Untuk bidang angka (mis. e.

input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
02), atribut
<form>
  <label for="choose">Would you prefer a banana or cherry? (required)</label>
  <input id="choose" name="i-like" required />
  <button>Submit</button>
</form>
1 dan
<form>
  <label for="choose">Would you prefer a banana or cherry? (required)</label>
  <input id="choose" name="i-like" required />
  <button>Submit</button>
</form>
2 dapat digunakan untuk memberikan rentang nilai yang valid. Jika bidang berisi nilai di luar rentang ini, itu akan menjadi tidak valid

Mari kita lihat contoh lain. Buat salinan baru dari awal buah. html

Sekarang hapus isi elemen

input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
_05, dan ganti dengan yang berikut ini

<form>
  <div>
    <label for="choose">Would you prefer a banana or a cherry?</label>
    <input
      type="text"
      id="choose"
      name="i-like"
      required
      minlength="6"
      maxlength="6" />
  </div>
  <div>
    <label for="number">How many would you like?</label>
    <input type="number" id="number" name="amount" value="1" min="1" max="10" />
  </div>
  <div>
    <button>Submit</button>
  </div>
</form>

  • Di sini Anda akan melihat bahwa kami telah memberikan
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    06 bidang
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    9 dan
    <form>
      <label for="choose">Would you prefer a banana or cherry? (required)</label>
      <input id="choose" name="i-like" required />
      <button>Submit</button>
    </form>
    
    0 dari enam, yang panjangnya sama dengan pisang dan ceri
  • Kami juga telah memberikan bidang
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    _09
    <form>
      <label for="choose">Would you prefer a banana or cherry? (required)</label>
      <input id="choose" name="i-like" required />
      <button>Submit</button>
    </form>
    
    1 dari satu dan
    <form>
      <label for="choose">Would you prefer a banana or cherry? (required)</label>
      <input id="choose" name="i-like" required />
      <button>Submit</button>
    </form>
    
    2 dari sepuluh. Angka yang dimasukkan di luar rentang ini akan ditampilkan sebagai tidak valid; . Jika pengguna secara manual memasukkan nomor di luar rentang ini, datanya tidak valid. Angka tidak diperlukan, jadi menghapus nilai tetap akan menghasilkan nilai yang valid

input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}

div {
  margin-bottom: 10px;
}

Berikut adalah contoh yang berjalan langsung

Catatan. Anda dapat menemukan contoh ini langsung di GitHub sebagai panjang buah. html. Lihat juga kode sumbernya

Catatan.

input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
02 (dan jenis lainnya, seperti
input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
13 dan
input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
14) juga dapat menggunakan atribut
input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
15, yang menentukan berapa kenaikan nilai yang akan naik atau turun saat kontrol input digunakan (seperti tombol angka naik dan turun). Dalam contoh di atas, kami tidak menyertakan atribut ________0______15, jadi nilai defaultnya adalah
input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
17. Ini berarti mengapung, seperti 3. 2, juga akan ditampilkan sebagai tidak valid

Berikut adalah contoh lengkap untuk menunjukkan penggunaan fitur validasi bawaan HTML. Pertama, beberapa HTML

<form>
  <p>
    <fieldset>
      <legend>Do you have a driver's license?<span aria-label="required">*</span></legend>
      <!-- While only one radio button in a same-named group can be selected at a time,
           and therefore only one radio button in a same-named group having the "required"
           attribute suffices in making a selection a requirement -->
      <input type="radio" required name="driver" id="r1" value="yes"><label for="r1">Yes</label>
      <input type="radio" required name="driver" id="r2" value="no"><label for="r2">No</label>
    </fieldset>
  </p>
  <p>
    <label for="n1">How old are you?</label>
    <!-- The pattern attribute can act as a fallback for browsers which
         don't implement the number input type but support the pattern attribute.
         Please note that browsers that support the pattern attribute will make it
         fail silently when used with a number field.
         Its usage here acts only as a fallback -->
    <input type="number" min="12" max="120" step="1" id="n1" name="age"
           pattern="\d+">
  </p>
  <p>
    <label for="t1">What's your favorite fruit?<span aria-label="required">*</span></label>
    <input type="text" id="t1" name="fruit" list="l1" required
           pattern="[Bb]anana|[Cc]herry|[Aa]pple|[Ss]trawberry|[Ll]emon|[Oo]range">
    <datalist id="l1">
      <option>Banana</option>
      <option>Cherry</option>
      <option>Apple</option>
      <option>Strawberry</option>
      <option>Lemon</option>
      <option>Orange</option>
    </datalist>
  </p>
  <p>
    <label for="t2">What's your email address?</label>
    <input type="email" id="t2" name="email">
  </p>
  <p>
    <label for="t3">Leave a short message</label>
    <textarea id="t3" name="msg" maxlength="140" rows="5"></textarea>
  </p>
  <p>
    <button>Submit</button>
  </p>
</form>

Dan sekarang beberapa CSS untuk menata HTML

form {
  font: 1em sans-serif;
  max-width: 320px;
}

p > label {
  display: block;
}

input[type="text"],
input[type="email"],
input[type="number"],
textarea,
fieldset {
  width: 100%;
  border: 1px solid #333;
  box-sizing: border-box;
}

input:invalid {
  box-shadow: 0 0 5px 1px red;
}

input:focus:invalid {
  box-shadow: none;
}

Ini diterjemahkan sebagai berikut

Lihat daftar lengkap atribut yang dapat digunakan untuk membatasi nilai input dan tipe input yang mendukungnya

Catatan. Anda dapat menemukan contoh ini langsung di GitHub sebagai contoh lengkap. html (lihat juga kode sumber. )

Anda harus menggunakan JavaScript jika ingin mengontrol tampilan dan nuansa pesan kesalahan asli. Pada bagian ini kita akan melihat berbagai cara untuk melakukan ini

Constraint Validation API terdiri dari sekumpulan metode dan properti yang tersedia pada antarmuka DOM elemen formulir berikut

  • input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    18 (mewakili elemen
    <form>
      <label for="choose">Would you prefer a banana or a cherry?</label>
      <input id="choose" name="i-like" required pattern="[Bb]anana|[Cc]herry" />
      <button>Submit</button>
    </form>
    
    0)
  • input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    20 (mewakili elemen
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    21)
  • input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    22 (mewakili elemen
    input:invalid {
      border: 2px dashed red;
    }
    
    input:invalid:required {
      background-image: linear-gradient(to right, pink, lightgreen);
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    8)
  • input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    24 (mewakili elemen
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    25)
  • input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    26 (mewakili elemen
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    27)
  • input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    28 (mewakili elemen
    form {
      font: 1em sans-serif;
      max-width: 320px;
    }
    
    p > label {
      display: block;
    }
    
    input[type="text"],
    input[type="email"],
    input[type="number"],
    textarea,
    fieldset {
      width: 100%;
      border: 1px solid #333;
      box-sizing: border-box;
    }
    
    input:invalid {
      box-shadow: 0 0 5px 1px red;
    }
    
    input:focus:invalid {
      box-shadow: none;
    }
    
    2)

Constraint Validation API menyediakan properti berikut pada elemen di atas

  • input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    _30. Mengembalikan pesan lokal yang menjelaskan batasan validasi yang tidak dipenuhi oleh kontrol (jika ada). Jika kontrol bukan kandidat untuk validasi batasan (
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    31 adalah
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    32) atau nilai elemen memenuhi batasannya (valid), ini akan mengembalikan string kosong
  • input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    _33. Mengembalikan objek
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    _34 yang berisi beberapa properti yang menjelaskan status validitas elemen. Anda dapat menemukan detail lengkap dari semua properti yang tersedia di halaman referensi
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    34;
    • <form>
        <label for="choose">Would you prefer a banana or cherry? (required)</label>
        <input id="choose" name="i-like" required />
        <button>Submit</button>
      </form>
      
      _9. Mengembalikan
      input:invalid {
        border: 2px dashed red;
      }
      
      input:valid {
        border: 2px solid black;
      }
      
      _37 jika nilainya tidak cocok dengan yang ditentukan, dan
      input:invalid {
        border: 2px dashed red;
      }
      
      input:valid {
        border: 2px solid black;
      }
      
      32 jika cocok. Jika true, elemen tersebut cocok dengan pseudo-class
      <form>
        <label for="choose">Would you prefer a banana or cherry? (required)</label>
        <input id="choose" name="i-like" required />
        <button>Submit</button>
      </form>
      
      6 CSS
    • input:invalid {
        border: 2px dashed red;
      }
      
      input:invalid:required {
        background-image: linear-gradient(to right, pink, lightgreen);
      }
      
      input:valid {
        border: 2px solid black;
      }
      
      3. Mengembalikan
      input:invalid {
        border: 2px dashed red;
      }
      
      input:valid {
        border: 2px solid black;
      }
      
      _37 jika nilainya lebih panjang dari panjang maksimum yang ditentukan oleh atribut, atau
      input:invalid {
        border: 2px dashed red;
      }
      
      input:valid {
        border: 2px solid black;
      }
      
      32 jika lebih pendek dari atau sama dengan maksimum. Jika true, elemen tersebut cocok dengan pseudo-class
      <form>
        <label for="choose">Would you prefer a banana or cherry? (required)</label>
        <input id="choose" name="i-like" required />
        <button>Submit</button>
      </form>
      
      6 CSS
    • input:invalid {
        border: 2px dashed red;
      }
      
      input:invalid:required {
        background-image: linear-gradient(to right, pink, lightgreen);
      }
      
      input:valid {
        border: 2px solid black;
      }
      
      4. Mengembalikan
      input:invalid {
        border: 2px dashed red;
      }
      
      input:valid {
        border: 2px solid black;
      }
      
      _37 jika nilainya lebih pendek dari panjang minimum yang ditentukan oleh atribut, atau
      input:invalid {
        border: 2px dashed red;
      }
      
      input:valid {
        border: 2px solid black;
      }
      
      32 jika lebih besar dari atau sama dengan minimum. Jika true, elemen tersebut cocok dengan pseudo-class
      <form>
        <label for="choose">Would you prefer a banana or cherry? (required)</label>
        <input id="choose" name="i-like" required />
        <button>Submit</button>
      </form>
      
      6 CSS
    • input:invalid {
        border: 2px dashed red;
      }
      
      input:invalid:required {
        background-image: linear-gradient(to right, pink, lightgreen);
      }
      
      input:valid {
        border: 2px solid black;
      }
      
      0. Mengembalikan
      input:invalid {
        border: 2px dashed red;
      }
      
      input:valid {
        border: 2px solid black;
      }
      
      _37 jika nilainya lebih besar dari maksimum yang ditentukan oleh atribut, atau
      input:invalid {
        border: 2px dashed red;
      }
      
      input:valid {
        border: 2px solid black;
      }
      
      32 jika kurang dari atau sama dengan maksimum. Jika benar, elemen tersebut cocok dengan pseudo-class
      <form>
        <label for="choose">Would you prefer a banana or cherry? (required)</label>
        <input id="choose" name="i-like" required />
        <button>Submit</button>
      </form>
      
      _6 dan
      <form>
        <label for="choose">Would you prefer a banana or cherry? (required)</label>
        <input id="choose" name="i-like" required />
        <button>Submit</button>
      </form>
      
      7 CSS
    • input:invalid {
        border: 2px dashed red;
      }
      
      input:invalid:required {
        background-image: linear-gradient(to right, pink, lightgreen);
      }
      
      input:valid {
        border: 2px solid black;
      }
      
      1. Mengembalikan
      input:invalid {
        border: 2px dashed red;
      }
      
      input:valid {
        border: 2px solid black;
      }
      
      _37 jika nilainya kurang dari minimum yang ditentukan oleh atribut, atau
      input:invalid {
        border: 2px dashed red;
      }
      
      input:valid {
        border: 2px solid black;
      }
      
      32 jika lebih besar dari atau sama dengan minimum. Jika benar, elemen tersebut cocok dengan pseudo-class
      <form>
        <label for="choose">Would you prefer a banana or cherry? (required)</label>
        <input id="choose" name="i-like" required />
        <button>Submit</button>
      </form>
      
      _6 dan
      <form>
        <label for="choose">Would you prefer a banana or cherry? (required)</label>
        <input id="choose" name="i-like" required />
        <button>Submit</button>
      </form>
      
      7 CSS
    • input:invalid {
        border: 2px dashed red;
      }
      
      input:invalid:required {
        background-image: linear-gradient(to right, pink, lightgreen);
      }
      
      input:valid {
        border: 2px solid black;
      }
      
      5. Mengembalikan
      input:invalid {
        border: 2px dashed red;
      }
      
      input:valid {
        border: 2px solid black;
      }
      
      _37 jika nilainya tidak sesuai dengan sintaks yang diperlukan (kapan
      form {
        font: 1em sans-serif;
        max-width: 320px;
      }
      
      p > label {
        display: block;
      }
      
      input[type="text"],
      input[type="email"],
      input[type="number"],
      textarea,
      fieldset {
        width: 100%;
        border: 1px solid #333;
        box-sizing: border-box;
      }
      
      input:invalid {
        box-shadow: 0 0 5px 1px red;
      }
      
      input:focus:invalid {
        box-shadow: none;
      }
      
      0 atau
      input:invalid {
        border: 2px dashed red;
      }
      
      input:valid {
        border: 2px solid black;
      }
      
      67), atau
      input:invalid {
        border: 2px dashed red;
      }
      
      input:valid {
        border: 2px solid black;
      }
      
      32 jika sintaksnya benar. Jika
      input:invalid {
        border: 2px dashed red;
      }
      
      input:valid {
        border: 2px solid black;
      }
      
      _37, elemen cocok dengan pseudo-class CSS
      <form>
        <label for="choose">Would you prefer a banana or cherry? (required)</label>
        <input id="choose" name="i-like" required />
        <button>Submit</button>
      </form>
      
      6
    • input:invalid {
        border: 2px dashed red;
      }
      
      input:valid {
        border: 2px solid black;
      }
      
      _71. Mengembalikan
      input:invalid {
        border: 2px dashed red;
      }
      
      input:valid {
        border: 2px solid black;
      }
      
      _37 jika elemen memenuhi semua batasan validasinya, dan karenanya dianggap valid, atau
      input:invalid {
        border: 2px dashed red;
      }
      
      input:valid {
        border: 2px solid black;
      }
      
      32 jika gagal dalam batasan apa pun. Jika true, elemen tersebut cocok dengan pseudo-class
      <form>
        <label for="choose">Would you prefer a banana or cherry? (required)</label>
        <input id="choose" name="i-like" required />
        <button>Submit</button>
      </form>
      
      5 CSS;
    • input:invalid {
        border: 2px dashed red;
      }
      
      input:invalid:required {
        background-image: linear-gradient(to right, pink, lightgreen);
      }
      
      input:valid {
        border: 2px solid black;
      }
      
      6. Mengembalikan
      input:invalid {
        border: 2px dashed red;
      }
      
      input:valid {
        border: 2px solid black;
      }
      
      _37 jika elemen memiliki atribut, tetapi tidak memiliki nilai, atau
      input:invalid {
        border: 2px dashed red;
      }
      
      input:valid {
        border: 2px solid black;
      }
      
      32 sebaliknya. Jika true, elemen tersebut cocok dengan pseudo-class
      <form>
        <label for="choose">Would you prefer a banana or cherry? (required)</label>
        <input id="choose" name="i-like" required />
        <button>Submit</button>
      </form>
      
      6 CSS
  • input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    _31. Mengembalikan
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    _37 jika elemen akan divalidasi saat formulir dikirimkan;

Constraint Validation API juga menyediakan metode berikut pada elemen di atas dan elemen

input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
84

  • input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    _85. Mengembalikan
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    _37 jika nilai elemen tidak memiliki masalah validitas; . Jika elemennya tidak valid, metode ini juga mengaktifkan event
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    88 pada elemen tersebut
  • input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    _89. Melaporkan kolom yang tidak valid menggunakan peristiwa. Metode ini berguna dalam kombinasi dengan
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    _90 dalam event handler
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    91
  • input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    _92. Menambahkan pesan kesalahan khusus ke elemen; . Ini memungkinkan Anda menggunakan kode JavaScript untuk menetapkan kegagalan validasi selain yang ditawarkan oleh batasan validasi HTML standar. Pesan ditampilkan kepada pengguna saat melaporkan masalah

Menerapkan pesan kesalahan yang disesuaikan

Seperti yang Anda lihat di contoh kendala validasi HTML sebelumnya, setiap kali pengguna mencoba mengirimkan formulir yang tidak valid, browser akan menampilkan pesan kesalahan. Cara pesan ini ditampilkan tergantung pada browser

Pesan otomatis ini memiliki dua kelemahan

  • Tidak ada cara standar untuk mengubah tampilan dan nuansa mereka dengan CSS
  • Mereka bergantung pada lokal browser, yang berarti Anda dapat memiliki halaman dalam satu bahasa tetapi pesan kesalahan ditampilkan dalam bahasa lain, seperti yang terlihat pada tangkapan layar Firefox berikut

Cara memeriksa validator bidang yang diperlukan dalam javascript

Menyesuaikan pesan error ini adalah salah satu kasus penggunaan yang paling umum dari Constraint Validation API. Mari kita bekerja melalui contoh sederhana bagaimana melakukan ini

Kita akan mulai dengan beberapa HTML sederhana (jangan ragu untuk meletakkannya di file HTML kosong; gunakan salinan baru dari fruit-start. html sebagai dasar, jika Anda suka)

input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
0

Dan tambahkan JavaScript berikut ke halaman

input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
_1

Di sini kita menyimpan referensi ke masukan email, lalu menambahkan pendengar acara ke dalamnya yang menjalankan kode yang terkandung setiap kali nilai di dalam masukan diubah

Di dalam kode yang terkandung, kami memeriksa apakah properti

input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
93 input email mengembalikan
input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
37, yang berarti bahwa nilai yang terkandung tidak cocok dengan pola untuk alamat email yang terbentuk dengan baik. Jika demikian, kami memanggil metode
input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
95 dengan pesan khusus. Ini menjadikan input tidak valid, sehingga ketika Anda mencoba mengirimkan formulir, pengiriman gagal dan pesan kesalahan khusus ditampilkan

Jika properti

input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
_93 mengembalikan
input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
32, kita memanggil metode
input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
95 dengan string kosong. Ini menjadikan input valid, sehingga formulir akan dikirim

Anda dapat mencobanya di bawah ini

Catatan. Anda dapat menemukan contoh ini langsung di GitHub sebagai pesan kesalahan khusus. html (lihat juga kode sumber. )

Contoh yang lebih detail

Sekarang kita telah melihat contoh yang sangat sederhana, mari kita lihat bagaimana kita dapat menggunakan API ini untuk membuat validasi kustom yang sedikit lebih rumit

Pertama, HTML. Sekali lagi, jangan ragu untuk membangun ini bersama kami

input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
_2

Formulir sederhana ini menggunakan atribut untuk mematikan validasi otomatis browser; . Namun, ini tidak menonaktifkan dukungan untuk API validasi kendala atau penerapan kelas semu CSS seperti

<form>
  <label for="choose">Would you prefer a banana or cherry? (required)</label>
  <input id="choose" name="i-like" required />
  <button>Submit</button>
</form>
5, dll. Artinya, meskipun browser tidak secara otomatis memeriksa validitas formulir sebelum mengirimkan datanya, Anda masih dapat melakukannya sendiri dan mengatur gaya formulir sesuai dengan itu.

Masukan kami untuk memvalidasi adalah

<form>
  <label for="choose">Would you prefer a banana or cherry? (required)</label>
  <input id="choose" name="i-like" required />
  <button>Submit</button>
</form>
_01, yaitu
input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
8, dan memiliki
input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
9 dari 8 karakter. Mari kita periksa menggunakan kode kita sendiri, dan tampilkan pesan kesalahan khusus untuk masing-masing

Kami bertujuan untuk menampilkan pesan kesalahan di dalam elemen

<form>
  <label for="choose">Would you prefer a banana or cherry? (required)</label>
  <input id="choose" name="i-like" required />
  <button>Submit</button>
</form>
04. Atribut
<form>
  <label for="choose">Would you prefer a banana or cherry? (required)</label>
  <input id="choose" name="i-like" required />
  <button>Submit</button>
</form>
_05 disetel pada
<form>
  <label for="choose">Would you prefer a banana or cherry? (required)</label>
  <input id="choose" name="i-like" required />
  <button>Submit</button>
</form>
04 itu untuk memastikan bahwa pesan kesalahan khusus kami akan disajikan kepada semua orang, termasuk dibacakan kepada pengguna pembaca layar

Catatan. Poin utama di sini adalah pengaturan atribut

input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
_99 pada formulir adalah yang menghentikan formulir untuk menampilkan gelembung pesan kesalahannya sendiri, dan memungkinkan kita untuk menampilkan pesan kesalahan khusus di DOM dengan cara yang kita pilih sendiri

Sekarang ke beberapa CSS dasar untuk sedikit meningkatkan tampilan formulir, dan memberikan beberapa umpan balik visual saat input data tidak valid

input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
_3

Sekarang mari kita lihat JavaScript yang mengimplementasikan validasi kesalahan kustom

input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
_4

Komentar menjelaskan banyak hal dengan cukup baik, tetapi singkat

  • Setiap kali kami mengubah nilai input, kami memeriksa untuk melihat apakah itu berisi data yang valid. Jika sudah maka kami menghapus pesan kesalahan apa pun yang ditampilkan. Jika data tidak valid, kami menjalankan
    <form>
      <label for="choose">Would you prefer a banana or cherry? (required)</label>
      <input id="choose" name="i-like" required />
      <button>Submit</button>
    </form>
    
    _08 untuk menunjukkan kesalahan yang sesuai
  • Setiap kali kami mencoba mengirimkan formulir, kami kembali memeriksa apakah datanya valid. Jika demikian, kami membiarkan formulir dikirimkan. Jika tidak, kami menjalankan
    <form>
      <label for="choose">Would you prefer a banana or cherry? (required)</label>
      <input id="choose" name="i-like" required />
      <button>Submit</button>
    </form>
    
    _08 untuk menunjukkan kesalahan yang sesuai, dan menghentikan pengiriman formulir dengan
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    90
  • Fungsi
    <form>
      <label for="choose">Would you prefer a banana or cherry? (required)</label>
      <input id="choose" name="i-like" required />
      <button>Submit</button>
    </form>
    
    _08 menggunakan berbagai properti dari objek
    input:invalid {
      border: 2px dashed red;
    }
    
    input:valid {
      border: 2px solid black;
    }
    
    33 input untuk menentukan apa kesalahannya, dan kemudian menampilkan pesan kesalahan yang sesuai

Inilah hasil langsungnya

Catatan. Anda dapat menemukan contoh ini langsung di GitHub sebagai detail-custom-validation. html. Lihat juga kode sumbernya

API validasi kendala memberi Anda alat yang ampuh untuk menangani validasi formulir, memungkinkan Anda memiliki kontrol besar atas antarmuka pengguna di atas dan di luar apa yang dapat Anda lakukan dengan HTML dan CSS saja

Dalam beberapa kasus, seperti kontrol khusus, Anda tidak akan dapat atau tidak ingin menggunakan API Validasi Kendala. Anda masih dapat menggunakan JavaScript untuk memvalidasi formulir Anda, tetapi Anda hanya perlu menulis sendiri

Untuk memvalidasi formulir, tanyakan pada diri sendiri beberapa pertanyaan

Validasi seperti apa yang harus saya lakukan?

Anda perlu menentukan cara memvalidasi data Anda. operasi string, konversi tipe, ekspresi reguler, dan sebagainya. Terserah kamu

Apa yang harus saya lakukan jika formulir tidak divalidasi?

Ini jelas masalah UI. Anda harus memutuskan bagaimana bentuk akan berperilaku. Apakah formulir tetap mengirim data?

Bagaimana saya dapat membantu pengguna memperbaiki data yang tidak valid?

Untuk mengurangi frustrasi pengguna, sangat penting untuk memberikan informasi bermanfaat sebanyak mungkin untuk memandu mereka dalam memperbaiki masukan mereka. Anda harus menawarkan saran di awal agar mereka tahu apa yang diharapkan, serta menghapus pesan kesalahan. Jika Anda ingin mempelajari persyaratan UI validasi formulir, berikut adalah beberapa artikel bermanfaat yang harus Anda baca

  • Bantu pengguna memasukkan data yang benar dalam formulir
  • Memvalidasi masukan
  • Cara Melaporkan Kesalahan dalam Formulir. 10 Pedoman Desain

Contoh yang tidak menggunakan API validasi kendala

Untuk mengilustrasikannya, berikut ini adalah versi sederhana dari contoh sebelumnya tanpa Constraint Validation API

HTML hampir sama;

input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
5

Demikian pula, CSS tidak perlu banyak berubah;

input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
_6

Perubahan besar ada pada kode JavaScript, yang perlu melakukan lebih banyak pekerjaan berat

input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}
_7

Hasilnya terlihat seperti ini

Seperti yang Anda lihat, tidak sulit untuk membuat sistem validasi sendiri. Bagian yang sulit adalah membuatnya cukup umum untuk digunakan lintas platform dan pada formulir apa pun yang mungkin Anda buat. Ada banyak pustaka yang tersedia untuk melakukan validasi formulir, seperti Validasi. js

Anda telah mencapai bagian akhir artikel ini, tetapi dapatkah Anda mengingat informasi yang paling penting? . Validasi formulir

Validasi formulir sisi klien terkadang memerlukan JavaScript jika Anda ingin menyesuaikan gaya dan pesan kesalahan, tetapi selalu mengharuskan Anda untuk memikirkan pengguna dengan hati-hati. Selalu ingat untuk membantu pengguna Anda memperbaiki data yang mereka berikan. Untuk itu, pastikan untuk

  • Tampilkan pesan kesalahan eksplisit
  • Jadilah permisif tentang format input
  • Tunjukkan dengan tepat di mana kesalahan terjadi, terutama pada formulir besar

Setelah Anda memeriksa bahwa formulir diisi dengan benar, formulir dapat dikirimkan. Kami akan membahas pengiriman data formulir berikutnya

Bagaimana cara memeriksa bidang yang diperlukan dalam JavaScript?

Memeriksa bidang yang tidak kosong .
Fungsi Javascript untuk memeriksa apakah suatu bidang kosong atau tidak // Jika panjang string elemen adalah 0 maka tampilkan pesan helper function required(inputtx) { if (inputtx. nilai. panjang == 0) { waspada("pesan"); .
Flow chart
Kode HTML <

Bagaimana cara memanggil validasi bidang yang diperlukan dengan JavaScript?

Validasi Formulir HTML Otomatis .

Apa yang diperlukan validasi lapangan?

ASP. Kontrol Validator Bidang Diperlukan .NET . Ini akan menimbulkan kesalahan jika pengguna membiarkan kontrol input kosong. Ini digunakan untuk mengamanatkan kontrol formulir yang diperlukan dan membatasi pengguna untuk menyediakan data. This validator is used to make an input control required. It will throw an error if user leaves input control empty. It is used to mandate form control required and restrict the user to provide data.

Bagaimana cara memeriksa validasi pada pengiriman formulir di JavaScript?

Saat pengguna mengklik tombol kirim formulir, acara onsubmit JavaScript akan memanggil fungsi. Dalam contoh kita, kita memanggil fungsi ValidationEvent() pada pengiriman formulir . Itu pertama-tama akan memvalidasi bidang formulir dan akan mengembalikan nilai boolean benar atau salah.