• 原生js验证表单


    html:
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>表单</title>
    <link rel="shortcut icon" type="image/x-icon" href="../img/ic.png"/>
    <link rel="stylesheet" href="../css/form.css"/>
    <script src="../js/vailidate.js"></script>
    </head>
    <body>
    <h1>用户注册</h1>
    <form action="demo1.html" method="post" enctype="multipart/form-data" class="register">
    <!-- 用户名 -->
    <div>
    <label for="userName">用户名</label>
    <input placeholder="输入用户名" type="text" name="userName" class="userName" id="userName"/>
    <span>*</span>
    </div>
    <input type="hidden" name="id" value="1"/>
    <!-- 密码 -->
    <div>
    <label for="password">密码</label>
    <input type="password" name="password" id="password" class="password" placeholder="输入密码"/>
    <span>*</span>
    </div>
    <div>
    <label for="realName">真实姓名</label>
    <input placeholder="输入用户名" type="text" name="realName" class="realName" id="realName"/>
    <span>*</span>
    </div>
    <!-- 性别单选框 -->
    <div>
    <label>性别</label>
    <input type="radio" name="gender" value="男" checked/><input type="radio" name="gender" value="女"/><span> </span>
    </div>
    <!-- 爱好复选框 -->
    <div>
    <label>爱好</label>
    <input type="checkbox" name="hobby" value="LOL"/>LOL
    <input type="checkbox" name="hobby" value="王者"/>王者
    <input type="checkbox" name="hobby" value="吃鸡" checked/>吃鸡
    <input type="checkbox" name="hobby" value="飞车"/>飞车
    <span id="afterHobby">*</span>
    </div>
    <!-- 生日 -->
    <div>
    <label for="birthday">生日</label>
    <input type="date" id="birthday" class="birthday" name="birthday"/>
    <span>*</span>
    </div>
    <!-- 身份证 -->
    <div>
    <label for="identityNo">身份证号</label>
    <input type="text" id="identityNo" class="identityNo" name="identityNo" placeholder="输入身份证"/>
    <span>*</span>
    </div>
    <!-- 电话 -->
    <div>
    <label for="phone">电话</label>
    <input type="tel" id="phone" name="phone" class="phone" placeholder="输入电话"/>
    <span>*</span>
    </div>
    <!-- 邮箱 -->
    <div>
    <label for="email">邮箱</label>
    <input type="email" id="email" name="email" class="email" placeholder="输入邮箱"/>
    <span>*</span>
    </div>
    <!-- 个人评价 -->
    <div class="resume">
    <label for="resume">个人评价</label>
    <textarea id="resume" cols="20" rows="10" style="vertical-align: middle;"></textarea>
    <span>*</span>
    </div>
    <!-- 城市 -->
    <div>
    <label>所属城市</label>
    <select id="province" name="province">
    <option value="ah">安徽</option>
    <option value="zj">浙江</option>
    <option value="js" selected>江苏</option>
    <option value="jx">江西</option>
    </select><select id="city" name="city">
    <option value="hf">合肥</option>
    <option value="hz">杭州</option>
    <option value="nj" selected>南京</option>
    <option value="nc">南昌</option>
    </select><select id="district" name="district">
    <option value="bh">滨湖</option>
    <option value="xh">西湖</option>
    <option value="jy" selected>建邺</option>
    <option value="lcq">老城</option>
    </select></div>
    <!-- 头像 -->
    <div>
    <label for="random">验证码</label>
    <input id="random" type="text" class="random" name="random" disabled/>
    <input id="reRandom" type="text" class="reRandom" name="reRandom"/>
    <span>*</span>
    </div>
    <!-- 头像 -->
    <div>
    <label for="pic">头像</label>
    <input id="pic" type="file" name="pic"/>
    <span>*</span>
    </div>
    <!-- 提交和重置 -->
    <div>
    <label> </label>
    <input type="submit" value="Submit"/>
    <input type="reset" value="Reset"/>
    </div>
    </form>
    </body>
    </html>
    <style>
    
     
    
    style:
    
    body {
    background: url("1000357.jpg") no-repeat;
    background-size: cover;
    }
    
    .register {
    width: 60%;
    margin: 0 auto;
    background-color: rgba(132, 170, 241, 0.2);
    padding: 10px;
    border-radius: 5px;
    
    }
    
    div {
    margin: 10px;
    height: 30px;
    }
    
    label {
    width: 80px;
    display: inline-block;
    text-align-last: justify;
    margin-right: 10px;
    }
    
    .userName,
    .password,
    .birthday,
    .phone,
    .email,
    .identityNo,
    .realName {
    height: 24px;
    width: 280px;
    padding-left: 10px;
    }
    
    .random, .reRandom {
    height: 24px;
    width: 130px;
    padding-left: 10px;
    text-align: center;
    }
    
    
    #resume {
    width: 288px;
    }
    
    .resume {
    height: 150px;
    margin-bottom: 20px;
    }
    
    select {
    height: 28px;
    }
    
    [type="submit"], [type="reset"] {
    border: none;
    width: 100px;
    text-align: center;
    background-color: green;
    color: white;
    line-height: 30px;
    height: 30px;
    border-radius: 5px;
    }
    
    .register span {
    color: red;
    }
    
    h1 {
    margin: 0 auto;
    padding: 0;
    color: #7f6b6b;
    width: 60%;
    }
    
     
    
    script:
    
    /**
    *使用String类和正则表达式进行表单验证
    */
    //随机验证码
    let num = "";
    //页面加载结束执行的函数
    onload = function () {
    blurElement();
    submitForm();
    //爱好的change事件验证选择结果
    let hobbyArr = document.querySelectorAll("input[name='hobby']");
    for (let i = 0; i < hobbyArr.length; i++) {
    hobbyArr[i].onchange = function () {
    vailidateHobby();
    };
    }
    
    //验证图片
    document.getElementById("pic").onchange = function () {
    vailidatePic();
    };
    
    //产生随机验证码
    generateRandomNum();
    };
    
    //元素失去焦点时执行的验证函数
    function blurElement() {
    //验证用户名
    document.getElementById("userName").onblur = function () {
    vailidateUserName();
    };
    
    //验证密码
    document.getElementById("password").onblur = function () {
    vailidatePassword()
    };
    
    //验证真实姓名
    document.getElementById("realName").onblur = function () {
    vailidateRealName();
    };
    
    //验证生日
    document.getElementById("birthday").onblur = function () {
    vailidateBirthday();
    };
    
    //验证电话
    document.getElementById("phone").onblur = function () {
    vailidatePhone();
    };
    
    //验证邮箱
    document.getElementById("email").onblur = function () {
    vailidateEmail();
    };
    
    //验证简介
    document.getElementById("resume").onblur = function () {
    vailidateResume();
    };
    
    //验证id
    document.getElementById("identityNo").onblur = function () {
    vailidateID();
    };
    }
    
    //表单提交执行的函数
    function submitForm() {
    let form = document.getElementsByClassName("register")[0];
    form.onsubmit = function (e) {
    //e.preventDefault();
    let flag =
    vailidateUserName()
    & vailidateHobby()
    & vailidatePassword()
    & vailidateRealName()
    & vailidateBirthday()
    & vailidatePhone()
    & vailidateEmail()
    & vailidateResume()
    & vailidatePic()
    & vailidateID();
    //alert(flag);
    return flag == 1 ? true : false;
    };
    }
    
    //1、验证用户名:6-12位,字母开头,不能有_$之外的特殊字符,非空,唯一
    function vailidateUserName() {
    let username = document.getElementById("userName");
    let span = next(username);
    let value = username.value;
    let reg = /^[a-zA-Z][w$]{5,11}$/;
    if (value == "") {
    span.innerHTML = "用户名不能为空";
    span.style.color = "red";
    return false;
    } else if (!reg.test(value)) {
    span.innerHTML = "用户名6-12位字母开头";
    span.style.color = "red";
    return false;
    }
    span.innerHTML = "用户名可用";
    span.style.color = "green";
    return true;
    }
    
    //2、验证密码:6-12位非空,必须包含大写字符,字母开头,非空
    function vailidatePassword() {
    let password = document.getElementById("password");
    let span = next(password);
    let value = password.value;
    let code = /^[a-zA-Z]$/;
    //非空
    if (value == "") {
    span.innerHTML = "密码不能为空";
    span.style.color = "red";
    return false;
    }
    //首字母
    let firstWord = value.charAt(0);
    if (!code.test(firstWord)) {
    span.innerHTML = "密码首位必须是字母";
    span.style.color = "red";
    return false;
    }
    //大写字符 hello
    let upCode = /^[A-Z]$/;
    for (let i = 0; i < value.length; i++) {
    if (upCode.test(value[i])) {
    break;
    } else if (i == value.length - 1) {
    span.innerHTML = "密码必须必须包含一位大写字母";
    span.style.color = "red";
    return false;
    }
    }
    //长度
    if (value.length > 12 || value.length < 6) {
    span.innerHTML = "密码长度6-12位";
    span.style.color = "red";
    return false;
    }
    span.innerHTML = "密码可用";
    span.style.color = "green";
    return true;
    }
    
    //3、验证爱好:至少一个
    function vailidateHobby() {
    let hobbyArr = document.querySelectorAll("input[name='hobby']");
    let count = 0;
    for (let i = 0; i < hobbyArr.length; i++) {
    if (hobbyArr[i].checked) {
    count++;
    }
    }
    let span = document.getElementById("afterHobby");
    if (count == 0) {
    span.innerHTML = "爱好至少选择一个";
    span.style.color = "red";
    return false;
    }
    span.innerHTML = "爱好选择正确";
    span.style.color = "green";
    return true;
    }
    
    //4、验证生日,非空
    function vailidateBirthday() {
    let birthday = document.getElementById("birthday");
    let span = next(birthday);
    let value = birthday.value;
    //2019-09-10
    console.log(value);
    //非空
    if (value == "") {
    span.innerHTML = "生日不能为空";
    span.style.color = "red";
    return false;
    }
    span.innerHTML = "生日正确";
    span.style.color = "green";
    return true;
    }
    
    //5、验证电话 1[3456789]d{9}
    function vailidatePhone() {
    let phone = document.getElementById("phone");
    let span = next(phone);
    let value = phone.value;
    let reg = /^1[3456789]d{9}$/;
    if (value == "") {
    span.innerHTML = "电话不能为空";
    span.style.color = "red";
    return false;
    }
    if (value.charAt(0) !== '1') {
    span.innerHTML = "电话首位是1";
    span.style.color = "red";
    return false;
    }
    if (!(/^[3456789]$/.test(value.charAt(1)))) {
    span.innerHTML = "电话第2位是3456789任一位";
    span.style.color = "red";
    return false;
    }
    if (!reg.test(value)) {
    span.innerHTML = "电话11位数字";
    span.style.color = "red";
    return false;
    }
    span.innerHTML = "电话正确";
    span.style.color = "green";
    return true;
    }
    
    //6、验证邮箱 hao123@qq.com /hao123@qq.com.cn /hao123@qq.cn /hao123@qq.org /hao123@qq.net
    function vailidateEmail() {
    let email = document.getElementById("email");
    let span = next(email);
    let value = email.value;
    let reg = /^[A-Za-z]w+@[a-z0-9]{2,}(.com|.cn|.com.cn|.net|.org)$/;
    if (value == "") {
    span.innerHTML = "邮箱不能为空";
    span.style.color = "red";
    return false;
    } else if (!reg.test(value)) {
    span.innerHTML = "邮箱不合法,请参考:hao123@qq.com.cn";
    span.style.color = "red";
    return false;
    }
    span.innerHTML = "邮箱正确";
    span.style.color = "green";
    return true;
    }
    
    //7、验证个人评价 不能超200字,非空
    function vailidateResume() {
    let resume = document.getElementById("resume");
    let span = next(resume);
    let value = resume.value;
    if (value == "") {
    span.innerHTML = "个人评价不能为空!";
    span.style.color = "red";
    return false;
    }
    if (value.length > 200) {
    span.innerHTML = "内容不能超200字符!";
    span.style.color = "red";
    return false;
    }
    span.innerHTML = "输入正确!";
    span.style.color = "green";
    return true;
    }
    
    //8、验证头像(大小和类型)
    function vailidatePic() {
    //let arr = ["png", 'jpg', 'gif', 'bmp'];
    let pic = document.getElementById("pic");
    let span = next(pic);
    let reg = /^png|jpg|gif|bmp$/;
    //获得当前图片的文件列表,是一个数组
    let fileList = pic.files;
    console.log(fileList);
    let imgFile = fileList[0];
    //必须处理的undefined异常
    if (!imgFile) {
    span.innerHTML = "文件没有上传文件";
    span.style.color = "red";
    return false;
    }
    //获得imgFile的3个属性
    let fileName = imgFile.name;//expo.png
    let fileSize = imgFile.size;//字节 1024byte = 1kB,1024kB = 1M
    //文件名的后缀
    let suffix = fileName.substring(fileName.lastIndexOf(".") + 1);//png
    if (fileSize > (150 * 1024)) {
    span.innerHTML = "文件大小不能超150KB";
    span.style.color = "red";
    return false;
    } else if (!reg.test(suffix)) {
    span.innerHTML = "文件必须是图片格式";
    span.style.color = "red";
    return false;
    }
    span.innerHTML = "文件正确";
    span.style.color = "green";
    return true;
    }
    
    //9、验证身份证号码 18位
    function vailidateID() {
    let id = document.getElementById("identityNo");
    let span = next(id);
    //53 0102 1920 05 08 011X
    let value = id.value;
    //判断空
    if (value == "") {
    span.innerHTML = "身份证号码不能为空";
    span.style.color = "red";
    return false;
    }
    //判断长度
    if (value.length != 18) {
    span.innerHTML = "身份证号码长度18位";
    span.style.color = "red";
    return false;
    }
    //判断前17位数字
    let reg = /^d{17}$/;
    let str = value.substring(0, 17);
    if (!reg.test(str)) {
    span.innerHTML = "身份证号码前17位必须是数字";
    span.style.color = "red";
    return false;
    }
    //判断验证码
    reg = /^[dxX]$/;
    str = value.substring(17);
    if (!reg.test(str)) {
    span.innerHTML = "验证码必须是数字、x、X";
    span.style.color = "red";
    return false;
    }
    //判断区域码
    let arr = [
    "11", "12", "13", "14", "21", "22", "23",
    "21", "22", "23",
    "31", "32", "33", "34", "35", "36", "37",
    "41", "42", "43", "44", "45", "46",
    "50", "51", "52", "53", "54",
    "61", "62", "63", "64", "65",
    "81", "82", "83"
    ];
    str = value.substring(0, 2);
    for (let i = 0; i < arr.length; i++) {
    if (str === arr[i]) {
    break;
    } else if (i == arr.length - 1) {
    span.innerHTML = "区域码不正确!";
    span.style.color = "red";
    return false;
    }
    }
    //判断年 [1900-now]
    let year = parseInt(value.substring(6, 10));
    let now = new Date().getFullYear();
    if (year > now || year < 1900) {
    span.innerHTML = "年份必须在1900-" + now + "之间";
    span.style.color = "red";
    return false;
    }
    //判断月 [1-12]
    let month = parseInt(value.substring(10, 12));
    if (month > 12 || month < 1) {
    span.innerHTML = "月份必须在1-12之间!";
    span.style.color = "red";
    return false;
    }
    //判断日 [1-28][1-29][1-30][1-31]
    let days = 0;
    //2月的天数,根据year是否闰年
    if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
    //闰年
    days = 29;
    } else {
    //平年
    days = 28;
    }
    let arrDays = [31, days, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    let date = parseInt(value.substring(12, 14));
    if (date < 1 || date > arrDays[month - 1]) {
    span.innerHTML = "日必须在1-" + arrDays[month - 1] + "之间";
    span.style.color = "red";
    return false;
    }
    span.innerHTML = "身份证号码正确";
    span.style.color = "green";
    return true;
    }
    
    //10、验证真实姓名:汉字[2,50]|字母[3-50]
    function vailidateRealName() {
    let realName = document.getElementById("realName");
    let span = next(realName);
    let value = realName.value;
    let reg = /^([u4e00-u9fa5]{2,50})|([A-Za-z]{3,50})$/;
    if (value == "") {
    span.innerHTML = "真实姓名不能为空";
    span.style.color = "red";
    return false;
    } else if (!reg.test(value)) {
    span.innerHTML = "真实姓名汉字[2,50]或者字母[3-50]";
    span.style.color = "red";
    return false;
    }
    span.innerHTML = "姓名可用";
    span.style.color = "green";
    return true;
    }
    
    //验证随机验证码
    function vailidateRandom () {
    //作业:完成今天所有表单验证
    //还有此处验证功能:just do it!
    }
    
    //t元素后面的兄弟元素
    function next(t) {
    return t.nextElementSibling;
    }
    
    //产生随机验证码
    function generateRandomNum() {
    for (let i = 0; i < 6; i++) {
    num += parseInt(Math.random() * 10);
    }
    document.getElementById("random").value = num;
    }
    
     
    
    
    
     
  • 相关阅读:
    centos6.5+mono+nginx跑asp.net
    YYHS-手机信号
    NOIP2017提高组初赛
    BZOJ-4915-简单的数字题
    BZOJ-5055-膜法师(离散化+树状数组)
    YYHS-Super Big Stupid Cross(二分+扫描线+平衡树)
    BZOJ-1008-[HNOI2008]越狱(快速幂)
    BZOJ-1192-[HNOI2006]鬼谷子的钱袋
    POJ-2417-Discrete Logging(BSGS)
    BZOJ-1010-[HNOI2008]玩具装箱toy(斜率优化)
  • 原文地址:https://www.cnblogs.com/lpzpp/p/11502838.html
Copyright © 2020-2023  润新知