css实现input表单验证
有没有办法只通过css来确定input标签是否有输入?
我有这个想法是因为我想完成一个自动补全的input部件,最基本的功能是:
- 如果input没有内容,这隐藏下拉框
- 反之,显示下拉框
我找到了一个也许不是很完美的实现方案,描述中可能会有一些细微的区别,不过我还是很希望能做这个简单的分享
首先,我们构造一个简单的form表单,仅仅只有一个input
<form>
<label for="input">输入框</label>
<input type="text" id="input"/>
</form>
当输入一些值,我设置input的边框颜色为绿的,下面是一个例子:
判断input是否为空
我通过html表单验证去判断是否为空,所以,这里我使用了required属性
<form>
<label> Input </label>
<input type="text" name="input" id="input" required />
</form>
// valid:当input输入值也合法值时采用的样式
#input:valid{
border-color: green;
}
这时,当有输入的时候,input表现的很好,边框颜色也有了相应的变化:
但是,这里有个问题,如果用户输入的是空格,那么边框颜色也会发生改变。
原理上看,这种表现是正常的,因为输入框确实有了内容。
但是,实际上,我不想让空格来触发自动补全弹窗
所以这还不能满足我们的需求,我要做更细致的检查
进一步完善
html提供我们利用正则去验证输入框内容的属性:pattern,这里也尝试使用该属性来完善
因为想把空格视为非法输入,我使用\S+,这个很简单,匹配一个或者多个任何非空白字符
<form>
<label> Input </label>
<input type="text" name="input" id="input" required pattern="\S+"/>
</form>
使用这种方式,的确奏效了,如果用户输入空格,输入框没有任何变化
但了个是,但是这个正则还是有问题,因为只允许输入非空白字符,所以你在任何位置输入空白都会导致输入框校验失败
这里可以使用其他的正则来匹配,比如\^\S+?.+
<form>
<label> Input </label>
<input type="text" name="input" id="input" required pattern="\S+.*"/>
</form>
现在输入框可以和空格混合输入了!
但是如果当前校验失败,输入框没有任何提示,这很不友好!
但我写这篇文章的时候,有一个问题我不断思考,能不能只用css给非法验证也加一种样式?
输入无效
这里不能使用:invalid,因为有required字段,即使我们什么也不做,输入框也会有非正确状态的样式提示,这很奇怪。
查看了相关资源,我们可以使用:placeholder-shown来达到我们的目的
大概思路是:
- 增加placeholder
- 如果输入框如果用户输入了内容,但还不合法做一个处理
- 最后利用css的覆盖特性,添加一个当验证成功的样式处理
最终的css大概是这样
/* 当填充的时候展示红色,所以这里默认是校验失败 */
input:not(:placeholder-shown) {
border-color: hsl(0, 76%, 50%);
}
/* 当验证成功的时候,采用这个样式 */
input:valid {
border-color: hsl(120, 76%, 50%);
}
这里有一个小小的demo
总结
上面的内容就是如何只用css来提供一个基础表单验证功能,说是只用css,其实也利用的pattern能接受正则表达式,哈哈,所以最根本的是如何写出最优的正则表达式。
css实现input表单验证的更多相关文章
- css修改input表单默认样式重置与自定义大全
链接地址: 伪元素表单控件默认样式重置与自定义大全 http://www.zhangxinxu.com/wordpress/?p=3381 Chrome 现在不支持通过伪元素修改 meter 元素样式 ...
- input表单验证(全面)
1.英文字母 1 <script type="text/javascript"> 2 //验证只能是字母 3 function checkZm(zm){ 4 var z ...
- input表单验证
1.屏蔽输入法(只是不能输入中文还可以输入特殊字符)<input style="ime-mode:disabled" onkeydown="if(event.key ...
- 纯CSS实现表单验证
ladies and 乡亲们,表单验证你在做吗?客户端or服务器端,javascript or jquery,动手写 or 使用插件,今天我们来探索下使用纯css实现表单验证,借以学习css sele ...
- 自定义常用input表单元素三:纯css实现自定义Switch开关按钮
自定义常用input表单元素的第三篇,自定义一个Switch开关,表面上看是和input没关系,其实这里采用的是checkbox的checked值的切换.同样,采用css伪类和"+" ...
- jQuery学习之路(8)- 表单验证插件-Validation
▓▓▓▓▓▓ 大致介绍 jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求.该插件捆绑了一套有用的验证方法,包括 ...
- form表单验证-Javascript
Form表单验证: js基础考试内容,form表单验证,正则表达式,blur事件,自动获取数组,以及css布局样式,动态清除等.完整代码如下: <!DOCTYPE html PUBLIC &qu ...
- 实现跨浏览器html5表单验证
div:nth-of-type(odd){ float: left; clear: left; } .origin-effect > div:nth-of-type(even){ float: ...
- jQuery Validate 表单验证 — 用户注册简单应用
相信很多coder在表单验证这块都是自己写验证规则的,今天我们用jQuery Validate这款前端验证利器来写一个简单的应用. 可以先把我写的这个小demo运行试下,先睹为快.猛戳链接--> ...
随机推荐
- NOIP模拟12
也算是最近几次比较水的一次吧. 考试时看T1像个打表找规律的题,扔了,去看T2,带修莫队??不会,完戏.看了T3,我决定还是去看T1. 看着T1,我突然发现T2是个大水题:主席树就行,不带修,修改时只 ...
- 01-MyBatis启动流程分析
目录 MyBatis简单介绍 启动流程分析 简单总结 附录 MyBatis内置别名转换 参考 MyBatis简单介绍 MyBatis是一个持久层框架,使用简单,学习成本较低.可以执行自己手写的SQL语 ...
- PHP关于access_token失效问题
PHP关于access_token失效问题 有时候PHP设置了缓存 明明就是没有过期 但却提示失效这情况一般就是1 多个appid和secrete 生成的access_token互相覆盖了 所以 这种 ...
- php session获取不到的解决方法
php session获取不到的解决方法 因为sesson数据是存在服务器端的硬盘一般临时空间不足 /tmp/ 1 这个需要清空下系统盘就可以了2 你可以在空间充足的地方mkdir 文件夹——你可以使 ...
- Win7安装pyenchant
pip3 install pyenchant==1.6.6 单纯的 pip3 install pyenchant报错
- Project Euler 60: Prime pair sets
素数3, 7, 109, 673很有意思,从中任取两个素数以任意顺序拼接起来形成的仍然是素数.例如,取出7和109,7109和1097都是素数.这四个素数的和是792,是具有这样性质的四个素数的最小的 ...
- ASP.NET Core 1.0: API的输入参数
Web API是需要接受参数的,譬如,通常用于创建数据的POST method需要接受输入数据,而用于GET method也需要接受一些可选参数,譬如:为了性能起见,控制返回数据的数量是至关重要的. ...
- 资深架构师Sum的故事:正则!入门就是这样简单
| 故事背景 职场如战场!Sum带领三个小队友用了两周,成功把代理功能给干出来了.如果说产品经理是最魔鬼的指挥官,那测试就是最魔鬼的教官.这两周,让Sum深深领略了什么是X市的日出. 不过话又说回来, ...
- 在CentOS安装消息中间件RabbitMQ
一.在安装前,请确认CentOS是否可以联网 1.可以用SecureCRT工具连接centos,这方面请自行百度. 2.CRT连接成功后可以通过ping www.baidu.com 查看是否成功,确认 ...
- linux命令指令
1.ls显示目录内容 -a 显示目录下所有文件 -l 显示详细信息 ls *.c 列出当前目录所有的.c文件 2.uname -a 查看内核版本 3.whoami 查看谁登陆虚拟机 4.cd 切 ...