当前位置: 首页 > news >正文

html5表单原生自定义验证

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

这段时间在重构自己以前做的项目,在做到注册时花了不少时间,原先是打算做用户名,密码,确认密码,邮箱,手机这几个选项,但写了半天后测试发现有不少问题,就干脆删繁就简,只留下了用户名和密码两项

按照设定,用户名要做唯一性检测,只能数字或字母,最大25位,密码则有很多条规则:
1密码位数在6到25之间
2密码不能是用户名或反转的用户名
3密码不能是纯字母或纯数字
4密码不能包含特殊符号
5密码不能为简单密码,如abc123
6严格区分大小写

首先是用户名的验证,不要看这个格式,这是编辑器格式化后的

<input type="text" id="username" placeholder="用户名(只能是数字或字母)" maxlength="25" required autofocus
                       name="UserName" oninput="value=value.replace(/[^\w\.\/]/ig,'')" onblur="CheckUserNameIsExits()">


在placeholder里提示只能数字或字母,maxlength给予25位限制,require必填项,autofoucus自动聚焦到用户名,检测输入事件,用正则表达式将不符合的值替换掉

然后是请求检测用户名是否存在的接口,在失去焦点时调用CheckUserNameIsExits的js方法

function CheckUserNameIsExits() {
    $.get("Index/Index/CheckUserIsExitsByUserName", {UserName: document.getElementById("username").value}, function (a) {
        var UserNameBox = document.getElementById("username")
        if (a === true) {
            UserNameBox.setCustomValidity("该用户已存在")
        } else {
            UserNameBox.setCustomValidity("")
        }
    })
}


由于项目没有使用bootstrap,也没有使用任何验证插件,再加上自己不想造轮子,于是采用了html5自带的表单验证,自带的虽然谈不上多好看,但也能接受

setCustomValidity可用来显示自定义的错误信息,同时会自动阻止表单提交,当信息为空时被视为通过验证,注意,setCustomValidity不能使用jquery的元素选择器获得的元素触发,似乎只能使用document获取元素触发

由于我在前面已加载了jquery,可以直接使用get的ajax提交,如果没有就自己写又臭又长的ajax提交吧

接下来是密码的验证

<input type="password" id="password" placeholder="密码" maxlength="25" required minlength="6"
                       name="Password" oninput="if(value.length>5)CheckPassword()">


同样的我给了最小最大长度限制,在输入值长度大于5时才调用CheckPassword进行检测

function CheckPassword() {
    var password=document.getElementById("password").value
    if(password.length>5){
        if (CheckSimplePassword(password, document.getElementById("username").value)) {
            document.getElementById("password").setCustomValidity("")
        }
        else {
            document.getElementById("password").setCustomValidity("密码格式不正确")
        }
    }
}


由于密码验证复杂了些,我再度进行了封装

function CheckSimplePassword(Password, UserName) {
    if (Password == UserName || Password == UserName.split("").reverse().join("")||/^\d+$/.test(Password)||/^[a-z]+$/i.test(Password)||!/^[A-Za-z0-9]+$/.test(Password)) {
        return false;
    }
    var String = ["abc123", "123abc", "password1", "1qaz2wsx", "qq123456", "1q2w3e4r", "123456abc", "abcd1234", "1234qwer", "123456789a", "aa123456",
        "123456aa","asd123456","code8925","ms0083jxj","123456qq","asdf1234","q1w2e3r4","12345678a","woaini1314","1234abcd","123qweasd","1qazxsw2",
        "kingcom5","zxcvbnm123", "1q2w3e4r5t"]
    if (String.indexOf(Password.toLowerCase()) > -1) {
        return false
    }
    return true
}

UserName.split("").reverse().join("")是用户名反转相同检测,/^\d+$/.test(Password)数字检测,/^[a-z]+$/i.test(Password)字母检测,!/^[A-Za-z0-9]+$/.test(Password)非字母数字检测,然后是检测弱密码,由于弱密码形式太多,只能手写数组

就这样html5原生表单检测完成了,当然前端检测只能防君子,防不住小人,安全要求略高的必须还要在后端对用户提交的值进行检测,然而这就不是本文该说的范畴了

转载于:https://my.oschina.net/u/3470006/blog/1505758

相关文章:

  • rc-form之最单纯情况
  • [HDU5685]Problem A
  • 修改asm中的sys密码
  • “Master”连胜世界围棋冠军,谁是幕后智能引擎?
  • JSOUP 超时分析与处理
  • Ubuntu14.04如何用root账号登陆系统
  • 【翻译】关于Apache Flume FileChannel
  • “小小科技女神”与微软DigiGirlz Day的约会
  • 17-思科防火墙:ASA动态NAT:实验一
  • 字符串拼接的双引号和单引号问题,转义字符
  • 2018年7月7日笔记
  • ffmpeg用法(心得体会还有你见过的用法)
  • Spring Cloud Spring Boot mybatis分布式微服务云架构 返回JSON格式
  • 常用命令参考
  • HongCMS 审计学习
  • hexo+github搭建个人博客
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • 2017届校招提前批面试回顾
  • Android系统模拟器绘制实现概述
  • django开发-定时任务的使用
  • es6要点
  • go append函数以及写入
  • iOS | NSProxy
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Mithril.js 入门介绍
  • Service Worker
  • SpiderData 2019年2月16日 DApp数据排行榜
  • spring security oauth2 password授权模式
  • spring学习第二天
  • TCP拥塞控制
  • uni-app项目数字滚动
  • use Google search engine
  • Webpack入门之遇到的那些坑,系列示例Demo
  • Yeoman_Bower_Grunt
  • 后端_ThinkPHP5
  • 理解在java “”i=i++;”所发生的事情
  • 前端_面试
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 学习笔记:对象,原型和继承(1)
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #QT(智能家居界面-界面切换)
  • #stm32整理(一)flash读写
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • $.ajax中的eval及dataType
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (Oracle)SQL优化技巧(一):分页查询
  • (分布式缓存)Redis持久化
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (四)linux文件内容查看
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (一)WLAN定义和基本架构转
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)jQuery 基础