这段时间在重构本身之前作的项目,在作到注册时花了很多时间,原先是打算作用户名,密码,确认密码,邮箱,手机这几个选项,但写了半天后测试发现有很多问题,就干脆删繁就简,只留下了用户名和密码两项javascript
按照设定,用户名要作惟一性检测,只能数字或字母,最大25位,密码则有不少条规则:
1密码位数在6到25之间
2密码不能是用户名或反转的用户名
3密码不能是纯字母或纯数字
4密码不能包含特殊符号
5密码不能为简单密码,如abc123
6严格区分大小写html
首先是用户名的验证,不要看这个格式,这是编辑器格式化后的前端
<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自动聚焦到用户名,检测输入事件,用正则表达式将不符合的值替换掉html5
而后是请求检测用户名是否存在的接口,在失去焦点时调用CheckUserNameIsExits的js方法java
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自带的表单验证,自带的虽然谈不上多好看,但也能接受jquery
setCustomValidity可用来显示自定义的错误信息,同时会自动阻止表单提交,当信息为空时被视为经过验证,注意,setCustomValidity不能使用jquery的元素选择器得到的元素触发,彷佛只能使用document获取元素触发ajax
因为我在前面已加载了jquery,能够直接使用get的ajax提交,若是没有就本身写又臭又长的ajax提交吧正则表达式
接下来是密码的验证bootstrap
<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原生表单检测完成了,固然前端检测只能防君子,防不住小人,安全要求略高的必须还要在后端对用户提交的值进行检测,然而这就不是本文该说的范畴了