纯CSS实现表单验证[通俗易懂]

纯CSS实现表单验证[通俗易懂]纯CSS实现表单验证

大家好,又见面了,我是你们的朋友全栈君。

关于表单验证

在我们的日常业务中,表单验证是个很常见设计需求,像一些登录注册框,问卷调查也都需要用到表单验证。

一般我们的实现思路都是JS监听input框的输入内容,判断用户输入内容,从而以此来决定下一步的操作。

例如这样:(以下例子来自优秀的开源UI库,element

<el-form :model="numberValidateForm" ref="numberValidateForm" label-width="100px" class="demo-ruleForm">
  <el-form-item
    label="年龄"
    prop="age"
    :rules="[ { required: true, message: '年龄不能为空'}, { type: 'number', message: '年龄必须为数字值'} ]"
  >
    <el-input type="age" v-model.number="numberValidateForm.age" autocomplete="off"></el-input>
  </el-form-item>
  <el-form-item>
    <el-button type="primary" @click="submitForm('numberValidateForm')">提交</el-button>
    <el-button @click="resetForm('numberValidateForm')">重置</el-button>
  </el-form-item>
</el-form>
<script>
  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();
      }
    }
  }
</script>
复制代码

以上就是我们常规的表达验证了,基本就都是用JS来完成的,那么我们能不能用CSS来实现呢?答案是可以的。这里先上DEMO

CSS实现表单验证

上面的表单验证就完全是由CSS来实现的,核心属性就是CSS Level 4Validity。思路就是利用:valid:invalid可以对<input>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
  */
<form class="form" id="form" method="get" action="/api/form">
    账号:
    <input data-title="账号" pattern="[\w]{6,10}" name="account" type="text" required />
    <span class="f-tips">请输入正确的账号</span>
    <br />
    密码:
    <input data-title="密码" pattern="[\w]{6,10}" name="password" type="password" required />
    <span class="f-tips">请输入正确的密码</span>
    <br />
    <input name="button" type="submit" value="提交" />
</form>
复制代码

效果截图

使用到的知识点

1. HTML5<input>的新属性:pattern

MDN的解释:

检查控件值的正则表达式.。pattern必须匹配整个值,而不仅仅是某些子集.。使用title属性来描述帮助用户的模式.。当类型属性的值为text, search, tel, url 或 email时,此属性适用,否则将被忽略。(兼容ie10+)

备注:

  1. 如果pattern里的验证规则不合法,例如多了长度校验内多了空格,也是会在控制台报错的,详情如下:

<input data-title="账号" pattern="/[\w]{6, 10}/" name="account" type="text" required />
复制代码
  1. CSSJS里的验证规则不一样,以下写法是会无效的,核心校验规则需要用[]包起来(目前从测试的几个例子是这样,具体详情还需要翻查资料,如果有大佬知道更具体的信息,请告知,谢谢!)
<input data-title="账号" pattern="/\w{6,10}/" name="account" type="text" required />
复制代码

2. CSS Level 4 选择器的新属性:invalid

详细介绍请看我的博文[译]19个CSS level 4 选择器

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107046.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm激活码最新2021破解方法

    pycharm激活码最新2021破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    52
  • 安卓手机怎么用java模拟器

    安卓手机怎么用java模拟器前言不知道你们发现没有,在很多互联网公司基本上都是80后,90后居多,很少还有超过40岁的程序员。可能很多人心里都有一个疑问,那就是这些40多岁的程序员都干嘛去了呢?创业显然只是极少数的人,至于管理岗,一个公司也不过几个人而已,更多的人显然已经不再从事这个行业了,难道真的只能提前退休了吗?目录由于文档内容过多,共计有500页,因此为了避免影响到大家的阅读体验,在此只以截图展示部分内容,详细完整版的可以在文末获取!部分内容展示深入浅出索引(上)索引的常见模型InnoDB的索引模型

    2022年7月7日
    23
  • c++ 实现键盘钩子

    c++ 实现键盘钩子一.总体概述  主要实现的是将windows活跃或是顶层窗口的键盘输入的记录下来储存在txt文件中。主要用到的知识windows操作系统的消息机制,动态库等一些知识二.具体的实现  首先我们要重新建立一个windows桌面应用程序,然后我们运行一下我们会看到一个窗口,我们创建桌面应用程序而不创建控制台程序是因为桌面应用程序,这里面最主要的原因控制应用程序模拟DOS系统的那种CUI操作,…

    2022年5月24日
    36
  • 解决SqlTransaction用尽的问题(SQL处理超时)

    解决SqlTransaction用尽的问题(SQL处理超时)有时候程序处理的数据量比较小时,四平八稳,一切安然无恙,但数据量一大,原先潜伏的问题就暴露无遗了。原访问数据库的代码为: 1SqlConnection conn = new SqlConnection(strConn); 2conn.Open(); 3SqlTransaction trans = conn.BeginTransaction(); 4try 5{ 6    CEngine.Exe…

    2022年5月18日
    37
  • 写了很久,这是一份最适合/贴切普通大众/科班/非科班的『学习路线』

    写了很久,这是一份最适合/贴切普通大众/科班/非科班的『学习路线』说实话,对于学习路线这种文章我一般是不写的,大家看我的文章也知道,我是很少写建议别人怎么样怎么样的文章,更多的是,写自己的真实经历,然后供大家去参考,这样子,我内心也比较踏实,也不怕误导他人。但是,最近好多人问我学习路线,而且很多大一大二的,说自己很迷茫,看到我那篇普普通通,我的三年大学之后很受激励,觉得自己也能行,(是的,别太浪,你一定能行)希望我能给他个学习路线,说…

    2022年7月16日
    20
  • 几种常见的ICMP报文类型

    几种常见的ICMP报文类型通过将一些常见的ICMP报文类型整理给大家,希望在需要的时候能帮助到大家。

    2022年5月2日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号