JS-DOM编程-04-表单验证

JS-DOM编程-04-表单验证

1.表单验证要求

  1. 用户名不能为空,且长度必须在6~14位之间。
  2. 用户名只能由数字和字母组成,不能含有其他符号。(正则表达式)
  3. 密码不能为空,且长度必须在6~20位之间。
  4. 密码和确认密码必须一致
  5. 邮箱地址不能为空,且必须合法。
  6. 统一失去焦点时验证。
  7. 错误提示信息统一在span标签中提示,并且要求字体12号,红色。
  8. 文本框再次获得焦点后,清空错误提示信息。如果文本框中数据不合法,要求清空文本框的value。
  9. 最终表单中所有项均合法才能提交。

2.实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>表单验证</title>
    <style type="text/css">
        /* 设置span中字体大小 */
        span {
            color: red;
            font-size: 12px;

        }
    </style>
    <!-- 
        1. 用户名不能为空。
        2. 用户名长度必须在6~14位之间。
        3. 用户名只能由数字和字母组成,不能含有其他符号。(正则表达式)
        4. 密码和确认密码一致
        5. 邮箱地址合法。
        6. 统一失去焦点时验证。
        7. 错误提示信息统一在span标签中提示,并且要求字体12号,红色。
        8. 文本框再次获得焦点后,清空错误提示信息。如果文本框中数据不合法,要求清空文本框的value。
        9. 最终表单中所有项均合法才能提交。
     -->
</head>
<body>
    <script type="text/javascript">
        window.onload = function() {
            //1.失去焦点时验证用户名是否合法
            //获取用户文本框后面的提示信息区span对象
            var userMessageElt = document.getElementById("userMessage");
            //获取用户名文本框对象
            var usernameElt = document.getElementById("username");
            usernameElt.onblur = function() {
                //1.1验证用户名长度是否合法
                //获取用户名字符串并去除两侧空白
                var username = usernameElt.value.trim();
                if(username.length == 0) {
                    userMessageElt.innerText = "请输入用户名!";
                } else {
                    if(username.length < 6 || username.length > 14) {
                        userMessageElt.innerText = "用户名长度必须为6-14!";
                    } else {
                        //1.2验证用户名是否符合标准格式
                        //创建用户名对应的正则表达式对象
                        var userRegExp = /^[A-Za-z0-9]+$/;
                        var isOk = userRegExp.test(username);
                        if(!isOk) {
                            userMessageElt.innerText = "用户名输入不合法!";
                        }
                    }
                }
                //清除提示信息和不合法字符串
                back(usernameElt,userMessageElt);
            }

            //2.密码不能为空,且密码长度必须为6-20
            //获取密码文本框后面的提示信息区span对象
            var pwdMessage = document.getElementById("pwdMessage");
            //获取密码文本框对象
            var passwordElt = document.getElementById("password");
            passwordElt.onblur = function() {
                //获取密码并去除左右空白
                var password = passwordElt.value.trim();
                //密码不能为空
                if(password.length == 0) {
                    pwdMessage.innerText = "请输入密码!";
                } else if(password.length <6 || password.length > 20){
                    pwdMessage.innerText = "密码长度必须为6-20!";
                }
                //光标回到文本框时清楚提示信息及不合法的密码
                back(passwordElt,pwdMessage);
            }
            // 3. 密码和确认密码一致
            //获取确认密码文本框后面的提示信息区span对象
            var conPwdMessage = document.getElementById("conPwdMessage");
            //获取确认密码文本框对象
            var confirmPasswordElt = document.getElementById("confirmPassword");
            confirmPasswordElt.onblur = function() {
                //获取密码文本框对象
                var passwordElt = document.getElementById("password");
                //获取密码并去除左右空白
                var password = passwordElt.value.trim();
                //获取重复输入的密码并去除空白
                var confirmPassword = confirmPasswordElt.value.trim();
                //密码不能为空
                if(password.length == 0 ) {
                    conPwdMessage.innerText = "请输入密码!";
                } else if(confirmPassword.length == 0) {
                    conPwdMessage.innerText = "请输入确认密码!";
                } else {
                    if(password.length <6 || password.length > 20) {
                        conPwdMessage.innerText = "密码长度必须为6-20!";
                    } else if(password != confirmPassword) {
                        conPwdMessage.innerText = "前后输入密码不一致!";
                    }
                }
                //光标回到文本框时清楚提示信息及不合法的密码
                back(confirmPasswordElt,conPwdMessage);
            }

            //4.检验邮箱地址是否合法
            //获取邮箱地址文本框后面的提示信息区span对象
            var emailMessageElt = document.getElementById("emailMessage");
            //获取邮箱地址文本框对象
            var emailElt = document.getElementById("email");
            emailElt.onblur = function() {
                //获取用户在文本框中输入的字符串,并去除两侧空白
                var email = document.getElementById("email").value.trim();
                //邮箱地址不能为空
                if(email.length == 0) {
                    emailMessageElt.innerText = "请输入邮箱地址!"
                } else {
                    //创建邮箱对应的正则表达式对象
                    var emailRegExp = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
                    //调用test方法验证用户输入的邮箱字符串格式,返回一个boolean值
                    var isOk = emailRegExp.test(email);
                    if(!isOk) {
                        emailMessageElt.innerText = "邮箱格式不合法!";
                    }
                }
                //文本框获得焦点时,清除提示信息和不合法value
                back(emailElt,emailMessageElt);
            }
            
            //5. 文本框再次获得焦点后,清除提示信息和不合法字符串
            //定义一个函数,传入文本框对象、文本框后面的提示信息区span对象
            var back = function(textElt,messageElt) {
                textElt.onfocus = function() {
                    //判断文本框value是否合法
                    if(messageElt.innerHTML != "") {
                        this.value = "";
                    }
                    //清空提示信息
                    messageElt.innerHTML = "";
                }
            }
            //6.当所有项都合法时,才能提交
            //获取注册按钮对象
            var subBtnElt = document.getElementById("subBtn");
            subBtnElt.onclick = function() {
                //在提交前,手动触发一次所有项的blur事件
                //触发用户名文本框的blur事件
                usernameElt.focus();
                usernameElt.blur();
                //触发密码文本框的blur事件
                passwordElt.focus();
                passwordElt.blur();
                //触发确认密码文本框的blur事件
                confirmPasswordElt.focus();
                confirmPasswordElt.blur();
                //触发邮箱地址文本框的blur事件
                emailElt.focus();
                emailElt.blur();
                //判断所有项是否合法,如果都合法,才能提交表单
                if(userMessageElt.innerText.length == 0 && pwdMessage.innerText.length == 0 && conPwdMessage.innerText.length == 0 && emailMessageElt.innerText.length == 0) {
                    //获取表单对象
                    var formElt = document.getElementById("userForm");
                    //提交表单
                    formElt.submit();
                } 
            }
        }
    </script>

    <form id="userForm" action="http://127.0.0.1:8080/123" method="get">
    <!-- <form id="userForm" method="GET"> -->
        <table>
            <!-- 用户名 -->
            <tr>
                <td>用户名:</td>
                <td>
                    <input type="HTML" id="username" name="username">
                </td>
                <!-- 用户名提示信息显示区 -->
                <td>
                    <span id="userMessage"></span>
                </td>
            </tr>

            <!-- 密码 -->
            <tr>
                <td>密码:</td>
                <td>
                    <input type="password" id="password" name="password">
                </td>
                <!-- 密码提示信息显示区 -->
                <td>
                    <span id="pwdMessage"></span>
                </td>
            </tr>
            <!-- 确认密码 -->
            <tr>
                <td>确认密码:</td>
                <td>
                    <input type="password" id="confirmPassword">
                </td>
                <!-- 确认密码提示信息显示区 -->
                <td>
                    <span id="conPwdMessage"></span>
                </td>
            </tr>
            <!-- 邮箱地址 -->
            <tr>
                <td>邮箱地址:</td>
                <td>
                    <input type="text" id="email" name="email">
                </td>
                <!-- 邮箱地址提示信息显示区 -->
                <td>
                    <span id="emailMessage"></span>
                </td>
            </tr>
            <!-- 提交表单 -->
            <tr>
                <td>
                    <input type="button" value="注册" id="subBtn">
                </td>
                <!-- 重置 -->
                <td>
                    <input type="reset" value="重置">
                </td>
            </tr>
        </table>
    </form>
</body>
</html>

posted @ 2021-08-06 23:59  TSCCG  阅读(113)  评论(0编辑  收藏  举报