- Konu sahibi
- #1
required niteliği, bir form alanının boş bırakılmasını engelleyen istemci tarafı bir doğrulamadır. Kullanıcı alanı doldurmadan formu göndermeye çalışırsa tarayıcı gönderimi durdurur ve kendi doğrulama mesajını gösterir. Ancak alanın doğru, güvenli veya iş kurallarına uygun olduğunu kanıtlamaz; sunucu tarafında da mutlaka doğrulama yapılmalıdır.required nasıl çalışır?
required değersiz bir Boolean niteliktir. Yazılması yeterlidir; required="true" kullanmak gerekli değildir. Örneğin:
HTML:
<style>input, select, button { border-radius: 3px; }</style>
<form action="/kayit" method="post">
<label for="ad">Adınız</label>
<input id="ad" name="ad" type="text" required>
<button type="submit">Gönder</button>
</form>
Kullanıcı
ad alanını boş bırakıp gönderirse tarayıcı formu göndermez. Alan doldurulursa bu kontrol geçilir ve formun diğer kısıtları değerlendirilir. Formda novalidate bulunması veya gönderme düğmesinde formnovalidate kullanılması istemci tarafı doğrulamayı devre dışı bırakabilir.Hangi kontrolü yapar, hangilerini yapmaz?
required temel olarak alanın boş olup olmadığını denetler. Kontrolün türüne göre boşluk kavramı değişebilir; type=text alanında bir veya daha çok boşluk boş string değildir ve required kontrolünü geçebilir. Anlamlı metin gereksinimini uygulama ayrıca doğrulamalıdır; required kendiliğinden trim yapmaz.Aşağıdaki ayrım, niteliğin sınırlarını gösterir:
| Alan veya kural | required ile kontrol edilir mi? | Açıklama |
|---|---|---|
| Metin alanının boş olmaması | Evet | Kullanıcı değer girmeden gönderemez. |
| E-posta biçimi | Hayır | Bunun için type="email" ve gerekirse pattern kullanılır. |
| Minimum veya maksimum değer | Hayır | Sayı, tarih veya uzunluk sınırı için min, max, minlength ve maxlength değerlendirilir. |
| Onay kutusunun işaretlenmesi | Evet | required verilen onay kutusu işaretlenmeden form gönderilmez. |
Bu nedenle
required type="email" birlikte kullanılırsa iki farklı kontrol yapılır: alan boş bırakılamaz ve girilen değer tarayıcının e-posta biçimi kontrolünden geçmelidir. Bu yine de e-posta adresinin gerçekten var olduğunu veya kullanıcıya ait olduğunu doğrulamaz.Radio, checkbox ve select alanlarında kullanım
Aynı
name değerine sahip radio düğmelerinden bir gruba required eklemek, gruptan en az bir seçimin yapılmasını zorunlu kılar. Checkbox için nitelik yalnızca eklendiği kutuyu zorunlu kılar; “kullanım şartlarını kabul ediyorum” gibi tek bir onay kutusunda bu beklenen davranıştır.Tek satırlı tek seçimli select için henüz seçim yapılmadığını göstermek istiyorsanız ilk doğrudan option boş değerli yer tutucu olabilir. Önceden gerçek seçim yapmak her durumda hata değildir; örnek seçimsiz başlangıç içindir:
Kod:
<label for="ulke">Ülke</label>
<select id="ulke" name="ulke" required>
<option value="">Seçiniz</option>
<option value="TR">Türkiye</option>
<option value="DE">Almanya</option>
</select>
İlk seçeneğin değeri gerçek bir seçim içeriyorsa alan başlangıçta dolu kabul edilebilir. Kullanıcı arayüzünde metin “Seçiniz” olsa bile
value değerini kontrol etmek bu yüzden önemlidir.Uygulanabilir kontrol listesi
- Kullanıcının mutlaka sağlaması gereken alanlara
requiredekleyin; isteğe bağlı alanları gereksiz yere zorunlu yapmayın. - Alan türüne uygun diğer kısıtları ekleyin: e-posta için
type="email", biçim içinpattern, uzunluk içinminlengthveyamaxlength. - Boş veya geçersiz bir değerle formu deneyin. Tarayıcı gönderimi durduruyorsa istemci doğrulaması çalışıyordur; bu, sunucu doğrulamasının yerine geçmez.
- Sunucuda gelen değeri yeniden doğrulayın, normalleştirin ve beklenmeyen değerleri reddedin. İstemci tarafındaki HTML nitelikleri değiştirilebilir veya tamamen atlanabilir.
Sık yapılan hatalar
required="false" yazmak alanı isteğe bağlı yapmaz; Boolean nitelik bulunduğu sürece alan zorunludur. İsteğe bağlı yapmak için niteliği HTML’den kaldırın. Ayrıca required boşlukları temizlemez, veritabanına kayıt yapmaz, iki alanın birbiriyle eşleşmesini kontrol etmez ve güvenlik doğrulaması sağlamaz. Bu tür kurallar için JavaScript gerekebilir; fakat JavaScript kullanılsa bile son karar sunucuda verilmelidir.