pattern 用於定義驗證輸入正則表達式
pattern 屬性適用於以下 <input> 類型:text, search, url, telephone, email 以及 password
需要注意的是:input的正則表達式是不需要使用 \ 來轉義特殊字符的,這和js里面的正則表達式有所區別,轉義了反而會報錯
可以使用 title 屬性來描述正則表達式,這樣在瀏覽器驗證表單是就會按title描述來提示錯誤消息
使用title雖然會有提示,但提示語前面會附加 “請匹配要求的格式”。如果瀏覽器是中文,提示語是英文,就會感覺怪怪的
這時我們可以通過setCustomValidity方法來自定義提示信息,更准確的提示給用戶,但因為設置了setCustomValidity后如果不手動取消,表單就會一直提示有錯誤消息而無法提交,所以需要寫一段js代碼
<script type="text/javascript">
function vali(obj) {
if (obj.validity.patternMismatch === true) {
obj.setCustomValidity($(obj).prop('title'));
} else {
obj.setCustomValidity('');
}
}
</script>
<input type="text" pattern="[a-zA-Z]+" oninvalid="vali(this);" />
上面這個方法還有一個問題,因為調用vali()函數是在oninvalid里面調用的,而oninvalid是在onsubmit中被瀏覽器調用的
所以執行vali()函數后submit不會再執行了,這樣即使vali()里面調用了obj.setCustomValidity('');清理了錯誤消息,表單也還是無法提交,還需要點擊一次提交按鈕
所以,看具體情況,也可以使用oninput代替oninvalid,或者就只使用title屬性,如果瀏覽器語言和提示信息語言一致的話