1. 程式人生 > 其它 >表單 驗證_純CSS實現表單驗證

表單 驗證_純CSS實現表單驗證

技術標籤:表單 驗證

  • 首發:krissarea.gitee.io(https://krissarea.gitee.io/blog/css/others/css-form-validation.html)

  • 作者:陳大魚頭(https://juejin.im/user/576b433bd342d30057aaa1e9/posts)

  • github:KRISACHAN(https://github.com/KRISACHAN)

關於表單驗證

在我們的日常業務中,表單驗證是個很常見設計需求,像一些登入註冊框,問卷調查也都需要用到表單驗證。

一般我們的實現思路都是JS監聽input框的輸入內容,判斷使用者輸入內容,從而以此來決定下一步的操作。

例如這樣:(以下例子來自優秀的開源UI庫,element)

:model="numberValidateForm" ref="numberValidateForm" label-width="100px" class="demo-ruleForm">

label="年齡"

prop="age"

:rules="[

{ required: true, message: '年齡不能為空'},

{ type: 'number', message: '年齡必須為數字值'}

]"

>

type="age" v-model.number="numberValidateForm.age" autocomplete="off">

type="primary" @click="submitForm('numberValidateForm')">提交

@click="resetForm('numberValidateForm')">重置

export default {

data() {

return {

numberValidateForm: {

age: ''

}

};

},

methods: {

submitForm(formName) {

this.$refs[formName].validate((valid) => {

if (valid) {

alert('submit!');

} else {

console.log('error submit!!');

return false;

}

});

},

resetForm(formName) {

this.$refs[formName].resetFields();

}

}

}

以上就是我們常規的表達驗證了,基本就都是用JS來完成的,那麼我們能不能用CSS來實現呢?答案是可以的。這裡先上DEMO (https://krisachan.github.io/css/css-form-validation.html)

CSS實現表單驗證

上面的表單驗證就完全是由CSS來實現的,核心屬性就是 CSSLevel4Validity。思路就是利用 :valid:invalid可以對 value進行判斷的特性。

這裡是全部程式碼

/*

* css

*/

:root {

--error-color: red;

}

.form > input {

margin-bottom: 10px;

}

.form > .f-tips {

color: var(--error-color);

display: none;

}

input[type="text"]:invalid ~ input[type="submit"],

input[type="password"]:invalid ~ input[type="submit"] {

display: none;

}

input[required]:invalid + span {

display: inline;

}

/*

* html

*/

class="form" id="form" method="get" action="/api/form">

賬號:

data-title="賬號" pattern="[\w]{6,10}" name="account" type="text" required />

class="f-tips">請輸入正確的賬號

/>

密碼:

data-title="密碼" pattern="[\w]{6,10}" name="password" type="password" required />

class="f-tips">請輸入正確的密碼

/>

name="button" type="submit" value="提交" />

效果截圖

971136a83f44d68ab0a2fb5d0bfa5991.png

f3b9fefd98044f140c5b9e92292a5e69.png

使用到的知識點

1.HTML5的新屬性:pattern

MDN的解釋:

檢查控制元件值的正則表示式.。pattern必須匹配整個值,而不僅僅是某些子集.。使用title屬性來描述幫助使用者的模式.。當型別屬性的值為text, search, tel, url 或 email時,此屬性適用,否則將被忽略。(相容ie10+)

備註:

  1. 如果pattern裡的驗證規則不合法,例如多了長度校驗內多了空格,也是會在控制檯報錯的,詳情如下:

88b7e60c0196f172c90f56a824acbebc.png

data-title="賬號" pattern="/[\w]{6, 10}/" name="account" type="text" required />

  1. CSSJS裡的驗證規則不一樣,以下寫法是會無效的,核心校驗規則需要用[]包起來(目前從測試的幾個例子是這樣,具體詳情還需要翻查資料,如果有大佬知道更具體的資訊,請告知,謝謝!)

data-title="賬號" pattern="/\w{6,10}/" name="account" type="text" required />

2.CSSLevel4選擇器的新屬性:invalid

詳細介紹請看我的博文[譯]19個CSS level 4 選擇器(https://juejin.im/post/5c42c657e51d4551ec60c283)

如果你也喜歡 CSS,喜歡探討技術,或者對本文,本系列有任何的意見或建議,魚頭非常希望你能加入一個有趣的微信群 — “進擊的CSS”。如果你有興趣,請新增魚頭微信(krisChans95),新增時註明 “加群”,Mmmm,最後,如果覺得我的文章還不錯,請加個關注跟點個“好看”唄!