js配合正则实现各种验证(邮箱,手机号,生日,身份证号等)

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8" />
    <title>用户注册</title>
    <style type="text/css">
        body {
            background-color: rgb(177, 208, 224);
            font: normal 12px Trebuchet MS;
            color: #000;
        }

        .roundedCorners {
            width: 350px;
            padding: 10px;
            background: #58bc58;
            box-shadow: 0px 0px 10px 0px #888888;
            border: 1px solid #DDEEF6;
            border-radius: 6px;
            margin: auto;
        }

        .roundedCorners-textbox {
            border: 1px solid #999;
            width: 250px;
        }

        .checkbox {
            margin-left: 30px;
            border: 1px solid #999;
            width: 20px;
        }

        .label {
            display: inline-block;
            width: 50px;
            text-align: center;
        }

        .default {
            color: grey;
            font-size: 12px;
        }

        .input {
            color: grey;
            font-size: 12px;
        }
    </style>
</head>
<script>
    window.onload = function () {
        /*
            表单提交是默认行为
                * preventDefault()
                * returnValue = false;
    
    
            知识点:
                * 正则表达式的方法
                    * reg.test(str):用正则表达式reg验证str是否合法
                    * exec()    等同于 match
    
                * 分组:()
                    * 引用
                        * 正则内引用:\n \1,\2
                        * 正则外引用:$n      $1,$2
                * 非:
                    * ^
                    * [^\d]
                * 表示所有字符:[\s\S],[\w\W],[\d\D]
         */
        var btnCheck = document.getElementById('btnCheck');
        btnCheck.onclick = function (e) {
            /*
                如果以下表单有一个不符合,则不允许提交表单
             */

            e = e || window.event;

            /*
            验证账号
                * 不能为空,
                * 不能使用特殊字符(数字、字母、下划线、横杠)开头,
                * 必须以字母开头,
                * 长度6-20
            */
            var username = document.getElementById('username').value;
            if (!/^[a-z][\w\-]{5,19}$/.test(username)) {
                alert('您输入的用户名不合法');

                // e.preventDefault();
                // return;
                return false;
            }


            //昵称只能输入中文
            var nickname = document.getElementById('nickname').value;
            if (!/^[\u2E80-\u9FFF]+$/.test(nickname)) {
                alert('昵称必须为中文');
                return false;
            }

            /*
                电子邮件
                    jinrong.xie@qq.com
                    123@qq.com
                    x_x@163.com
                    x-x@a-r.com.cn
                    x.x@laoxie.com
                    邮箱用户名必须3-30个字符
             */
            var email = document.getElementById('email').value;
            if (!/^[a-z0-9][\w\-\.]{2,29}@[a-z0-9\-]{2,67}(\.[a-z\u2E80-\u9FFF]{2,6})+$/.test(email)) {
                alert('邮箱格式错误');
                return false;
            }

            /*
                身份证
                    18/15
                    445655 19900707 2165
                    445655 19900707 211x
             */
            var identity = document.getElementById('identity').value;
            if (!/^(\d{17}|\d{14})[\dx]$/.test(identity)) {
                alert('身份证格式错误');
                return false;
            }


            /*
                手机号码
                    11位
                    158 8888 8888
                    1 [34578]
             */
            var phone = document.getElementById('phone').value;
            if (!/^1[3-9]\d{9}$/.test(phone)) {
                alert('手机号错误');
                return false;
            }

            /*
                生日
                    1999/05/08
                    1999-5-8
                    19990508
                    1999-05/08  不合法
                    199905
    
                    引用分组
                        * 正则内:\n
                        * 正则外:$n
                    分组顺序:以左括号出现的顺序为分组顺序
             */

            var birthday = document.getElementById('birthday').value;
            if (!/^\d{4}([\/\-]?)\d{1,2}\1\d{1,2}$/.test(birthday)) {
                alert('生日格式错误');
                return false;
            }


            /*
                密码
                    长度6-20
                    不能包含空格
             */
            var password = document.getElementById('password').value;
            if (!/^\S{6,20}$/.test(password)) {
                alert('密码禁止空格');
                return false;
            }


            var confirm_pwd = document.getElementById('confirm_pwd').value;
            if (confirm_pwd != password) {
                alert('两次输入密码不一致,请你仔细看看');
                return false;
            }

        }

        // 根据身份自动写入生日
        document.getElementById('identity').onblur = function () {
            // 445655199007072165
            var res = this.value.match(/\d{6}(\d{8})\d{4}/);
            if (res) {
                res = res[1];
            }
            document.getElementById('birthday').value = res;
        }
    }
</script>

<body>
    <form id="myform" action="05success.html" method="get">
        <div class="roundedCorners">
            <label class="label">账号</label>
            <input id="username" name="username" type="text" placeholder="用户名长度为6-20,禁止特殊字符" class="default roundedCorners-textbox" />
            <br />
            <br />
            <label class="label">昵称</label>
            <input id="nickname" name="nickname" type="text" class="roundedCorners-textbox" />
            <br />
            <br />
            <label class="label">电子邮件</label>
            <input id="email" name="email" type="text" class="roundedCorners-textbox" />
            <br />
            <br />
            <label class="label">身份证</label>
            <input id="identity" name="identity" type="text" class="roundedCorners-textbox" />
            <br />
            <br />
            <label class="label">手机号码</label>
            <input id="phone" name="phone" type="text" class="roundedCorners-textbox" />
            <br />
            <br />
            <label class="label">生日</label>
            <input id="birthday" name="birthday" type="text" class="roundedCorners-textbox" />
            <br />
            <br />
            <label class="label">密码</label>
            <input id="password" name="password" type="password" class="roundedCorners-textbox" />
            <br />
            <br />
            <label class="label">确认密码</label>
            <input id="confirm_pwd" name="confirm_pwd" type="text" class="roundedCorners-textbox" />
            <br />
            <br />
            <input type="checkbox" class="checkbox" />
            <label>10天内免登陆</label>
            <br/>
            <br/>

            <input type="submit" id="btnCheck" value="确定" />

            <input type="reset" value="清空" />
        </div>
    </form>

</body>

</html>
posted @ 2019-04-15 10:28  sun丶凹凸曼  阅读(1020)  评论(0编辑  收藏  举报