表單驗證是使用HTML5時的一個內置特性,HTML5提供了各種驗證屬性。作為瀏覽器端HTML和JavaScript的一部分。在將數據發送到服務器之前,我們可以使用它來驗證表單輸入。但是,我們應該信任發送的內容,所以最終驗證應該仍然在服務器上進行。
當表單輸入有效時,要素將顯示:valid 偽類樣式表。如果它是無效的,那么則出現:invalid 偽類樣式表。
當表單輸入無效時,瀏覽器將阻止表單提交并顯示錯誤信息。


表單驗證屬性
Pattern
Pattern應用于文本、檢索、鏈接、電話、郵件和密碼形式的輸入元素。
·它將正則表達式設置為數值,然后瀏覽器對其進行驗證。
Min
該屬性適用于范圍、數字、日期、月、周、時間、本地時間等類型的輸入元素。
·當輸入范圍或數字時,它會檢驗該值是否大于或等于Min屬性的給定值。
·當輸入日期、月份或星期時,它會檢驗日期是否為該屬性給定日期或在給定日期之后。
·當輸入時間時,它會檢驗日期和時刻是否都大于或等于該屬性給定時期。
Max
Max屬性是min屬性的對立面,它檢查輸入的內容是否小于或等于該屬性的給定值。
·當應用于范圍或數字類型的輸入時,它將檢查輸入的數字是否小于或等于min屬性的給定值
·當應用于日期、月份或星期等類型的元素時,它將檢查日期是否小于或等于該屬性值中給定的日期。
·當應用于時間類型輸入時,它將檢查日期和時間是否小于或等于min屬性的給定值。
Required
該屬性驗證輸入元素是否為空。
·它可以用于文本、檢索、鏈接、電話、郵件、密碼、日期、時間、月份、星期、數字、復選框、錄音、文檔,以及被選中內容和文本框等元素。
來源:Pexels
Step
Step檢驗輸入值是否為整數。
·若輸入日期類型的元素,它會檢查天數是否為整數。
·若輸入月份類型的元素,它會檢查月份數是否為整數。
·若輸入星期類型的元素,它會檢查星期數是否為整數。
·若輸入時間類型的元素,它會檢查秒數是否為整數。
·若輸入范圍和數字類型的元素,它會檢查范圍和數值是否為整數。
Minlength
Minlength屬性可應用于文本、檢索、鏈接、電話、電子郵、密碼和文本框類型的輸入元素。
·它檢查用戶輸入文本字數是否大于或等于該屬性值。
Maxlength
Maxlength屬性同樣可應用于文本、檢索、鏈接、電話、電子郵、密碼和文本框類型的輸入元素。
·它檢查用戶輸入文本字數是否小于或等于該屬性值。


應用表單驗證屬性
我們可以通過將表單驗證屬性添加到元素中來使用它們。例如,編寫一份以電子郵件地址作為輸入的表單。
第一步,輸入以下HTML語言:
<formid='form'>
<labelfor="email">What's your email address?</label>
<inputid="email" name="email" requiredpattern="[^@]+@[^.]+..+">
<buttontype='submit'>Submit</button>
</form>
在上述代碼中,輸入元素帶有required屬性,根據設定進行輸入。
同時,我們還以電子郵件地址的正則表達式作為值,對其添加pattern屬性。
接著如下所示,當輸入有效或無效時,我們通過添加樣式表來改變輸入元素的邊界:
input:invalid {
border: 1px solid red
}
input:vvalid {
border: 1px solid black
}
來源:view rawinput.css 平臺: GitHub
此處會用到文章開頭提及的偽類樣式來完成這一步驟。
最后,通過調用preventDefault來添加JavaScript代碼以防止本例中的表單提交。
constform = document.querySelector('#form');
form.onsubmit = (e) => {
e.preventDefault();
}
再舉一個檢查輸入的長度和范圍的例子。比如,編寫如下 HTML代碼來獲取用戶的姓名和年齡:
<formid='form'>
<labelfor="name">What's your name?</label>
<inputid="name" name="name" requiredminlength='5' maxlength='20'>
<br>
<spanid='name-too-short' hidden>Name is too short</span>
<spanid='name-too-long' hidden>Name is too long</span>
<br>
<labelfor="age">What's your age?</label>
<inputid="age" name="age" type='number' requiredmin='0' max='150'>
<br>
<spanid='age-too-high' hidden>Age is too high</span>
<spanid='age-too-low' hidden>Age is too low</span>
<br>
<buttontype='submit'>Submit</button>
</form>
輸入的姓名和年齡都具有長度和范圍屬性,當輸入無效時,可以看到以文中所示形式出現的輸入信息。
與例一相同,當輸入元素有效或無效時,輸入樣式表來更改輸入框邊界:
input:invalid {
border: 1px solid red
}
input:vvalid {
border: 1px solid black
}
最后,當輸入無效時可以通過JavaScript看到驗證信息:
const form = document.querySelector('#form');
const name = document.querySelector('#name');
const age = document.querySelector('#age');
const nameTooShort = document.querySelector('#name-too-short');
const nameTooLong = document.querySelector('#name-too-long');
const ageTooLow = document.querySelector('#age-too-low');
const ageTooHigh = document.querySelector('#age-too-high');
form.onsubmit= (e) => {
e.preventDefault();
}
name.oninput= (e) => {
nameTooShort.hidden=true;
nameTooLong.hidden=true;
if (e.srcElement.validity.tooShort) {
nameTooShort.hidden=false;
}
if (e.srcElement.validity.tooLong) {
nameTooLong.hidden=false;
}
}
age.oninput= (e) => {
ageTooLow.hidden=true;
ageTooHigh.hidden=true;
if (e.srcElement.validity.rangeOverflow) {
ageTooHigh.hidden=false;
}
if (e.srcElement.validity.rangeUnderflow) {
ageTooLow.hidden=false;
}
}
在上述代碼中,將oninput事件處理程序設置為事件處理程序函數,以便檢查后續輸入的有效性。
在每個函數中,我先隱藏所有信息,這樣就不會看到過時的消息了。然后,根據設置的最小和最大長度來檢查名稱輸入是否太短或太長。
若出現任何錯誤,會在HTML中取消隱藏相應的信息。
來源:Pexels
同樣,我們根據長度的最大最小設定值來檢驗年齡輸入值是否在所屬區間內。若出現錯誤,我們會在HTML中取消隱藏相應的信息。
通過HTML5和JavaScript,不需要任何函數庫就可以檢驗各種類型輸入值的有效性。
我們可以檢驗長度、范圍、任何帶有正則表達式的模式等輸入元素,但在保存之前應當檢查服務器端,因為部分用戶仍可以破解瀏覽器端應用程序來跳過驗證。
版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。