您好!欢迎访问家园网-www.jy.wang!

家园网

邮件格式验证和手机号验证

网络 作者:本站 点击:

邮件格式验证和手机号验证

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>注册</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <link rel="stylesheet" href="css/basic.css"/>
    <link href="css/login.css" rel="stylesheet" type="text/css">
</head>

<body>

<div class="login-boxtitle">
    <a href="index.html"><img alt="" src="images/logobig.png"/></a>
</div>

<div class="res-banner">
    <div class="res-main">
        <div class="login-banner-bg"><span></span><img src="images/big.png"/></div>
        <div class="login-box">

            <div class="mr-tabs" id="doc-my-tabs">
                <ul class="mr-tabs-nav mr-nav mr-nav-tabs mr-nav-justify">
                    <li class="mr-active"><a href="">注册</a></li>
                </ul>

                <div class="mr-tabs-bd">
                    <div class="mr-tab-panel mr-active">
                        <form method="post">

                            <div class="user-email">
                                <label for="email"><i class="mr-icon-envelope-o"></i></label>
                                <input type="email" name="" id="email" placeholder="请输入邮箱账号">
                            </div>
                            <div class="user-pass">
                                <label for="password"><i class="mr-icon-lock"></i></label>
                                <input type="password" name="" id="password" placeholder="设置密码">
                            </div>
                            <div class="user-pass">
                                <label for="passwordRepeat"><i class="mr-icon-lock"></i></label>
                                <input type="password" name="" id="passwordRepeat" placeholder="确认密码">
                            </div>

                            <div class="user-pass">
                                <label for="passwordRepeat"><i class="mr-icon-mobile"></i><span style="color:red;margin-left:5px">*</span></label>
                                <input type="text" name="" id="tel" placeholder="请输入手机号">
                            </div>

                        </form>

                        <div class="login-links">
                            <label for="reader-me">
                                <input id="reader-me" type="checkbox"> 点击表示您同意商城《服务协议》

                            </label>
                            <a href="login.html" class="mr-fr">登录</a>
                        </div>
                        <div class="mr-cf">
                            <input type="submit" name="" onclick="mr_verify()" value="注册" class="mr-btn mr-btn-primary mr-btn-sm mr-fl">
                        </div>
                    </div>


                </div>
            </div>

        </div>
    </div>

    <div class="footer ">
        <div class="footer-hd ">
            <p>
                <a href="http://www.mingrisoft.com/" target="_blank">明日科技</a>
                <b>|</b>
                <a href="index.html">商城首页</a>
                <b>|</b>
                <a href="#">支付宝</a>
                <b>|</b>
                <a href="#">物流</a>
            </p>
        </div>
        <div class="footer-bd ">
            <p>
                <a href="http://www.mingrisoft.com/Index/ServiceCenter/aboutus.html" target="_blank">关于明日</a>
                <a href="#">合作伙伴</a>
                <a href="#">联系我们</a>
                <a href="#">网站地图</a>
                <em>© 2016-2025 mingrisoft.com 版权所有</em>
            </p>
        </div>
    </div>
</body>
<script>
    function mr_verify(){

        //获取表单对象
        var email=document.getElementById("email");
        var password=document.getElementById("password");
        var passwordRepeat=document.getElementById("passwordRepeat");
        var tel=document.getElementById("tel");

        //验证项目是否为空
        if(email.value==='' || email.value===null){
            alert("邮箱不能为空!");
            return;
        }
        if(password.value==='' || password.value===null){
            alert("密码不能为空!");
            return;
        }
        if(passwordRepeat.value==='' || passwordRepeat.value===null){
            alert("确认密码不能为空!");
            return;
        }
        if(tel.value==='' || tel.value===null){
            alert("手机号码不能为空!");
            return;
        }

        if(password.value!==passwordRepeat.value ){
            alert("密码设置前后不一致!");
            return;
        }
        //验证邮件格式
        apos = email.value.indexOf("@")
        dotpos = email.value.lastIndexOf(".")
        if (apos < 1 || dotpos - apos < 2) {
            alert("邮箱格式错误!");
        }
        else {
            alert("邮箱格式正确!");
        }

        //验证手机号格式
        if(isNaN(tel.value)){
            alert("手机号请输入数字!");
            return;
        }
        if(tel.value.length!==11){
            alert("手机号是11个数字!");
            return;
        }

        alert('注册成功!');

    }
</script>
</html>

邮件格式验证和手机号验证代码详解

这段代码是一个用户注册页面的验证功能,重点验证邮箱格式、手机号格式、密码一致性等。让我详细讲解邮件格式验证和手机号验证的实现原理。


一、整体验证流程

text

用户点击"注册"按钮
        ↓
调用 mr_verify() 函数
        ↓
步骤1:获取表单元素的值
        ↓
步骤2:检查是否为空
        ↓
步骤3:检查密码是否一致
        ↓
步骤4:验证邮箱格式
        ↓
步骤5:验证手机号格式
        ↓
步骤6:所有验证通过 → 注册成功


二、邮件格式验证代码详解

核心代码

javascript

//验证邮件格式apos = email.value.indexOf("@")dotpos = email.value.lastIndexOf(".")if (apos < 1 || dotpos - apos < 2) {
    alert("邮箱格式错误!");}else {
    alert("邮箱格式正确!");}

1、indexOf("@") 是什么?

项目说明
含义查找字符串中 "@" 符号第一次出现的位置(索引)
返回值找到则返回位置(从0开始),没找到则返回 -1
示例"abc@def.com".indexOf("@") → 返回 3

2、lastIndexOf(".") 是什么?

项目说明
含义查找字符串中 "." 符号最后一次出现的位置
返回值找到则返回位置,没找到则返回 -1
示例"abc@def.com".lastIndexOf(".") → 返回 7

3、验证规则解析

条件含义说明
apos < 1@ 不在第1个字符之后邮箱必须有 @,且 @ 不能是第一个字符
dotpos - apos < 2@ 和 . 之间至少有一个字符@ 后面必须有域名,且 . 不能紧挨着 @

4、邮箱格式验证示例

邮箱地址aposdotposapos < 1dotpos - apos < 2结果
abc@def.com37false7-3=4 ≥2 → false✅ 正确
a@b.com131<1? false3-1=2 ≥2 → false✅ 正确
@def.com040<1 → true-❌ 错误
abc@.com34false4-3=1 <2 → true❌ 错误
abc@defcom3-1false-1-3=-4 <2 → true❌ 错误

5、邮箱验证的完整逻辑

javascript

// 标准邮箱格式:xxx@yyy.zzz//         ↓      ↓//      用户名   域名.后缀//        ↑      ↑//      apos   dotpos// 条件1:@ 不能在开头,所以 apos 必须 ≥ 1// 条件2:@ 和 . 之间至少有1个字符,所以 dotpos - apos ≥ 2

6、更好的邮箱正则表达式写法

虽然当前代码用 indexOf 和 lastIndexOf 实现了基本验证,但更专业的做法是使用正则表达式

javascript

// 更严格的邮箱验证function validateEmail(email) {
    // 正则表达式含义:
    // ^[a-zA-Z0-9._%+-]+  → 用户名:字母/数字/._%+-
    // @                    → @符号
    // [a-zA-Z0-9.-]+       → 域名:字母/数字/.-
    // \.                   → 点号
    // [a-zA-Z]{2,}$        → 后缀:2位以上字母
    var emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
    return emailRegex.test(email);}


三、手机号验证代码详解

核心代码

javascript

//验证手机号格式if(isNaN(tel.value)){
    alert("手机号请输入数字!");
    return;}if(tel.value.length!==11){
    alert("手机号是11个数字!");
    return;}

1、isNaN() 是什么?

项目说明
含义Is Not a Number(是不是"不是数字")
返回值true = 不是数字,false = 是数字
示例isNaN("123") → false(是数字)
isNaN("abc") → true(不是数字)

2、验证规则

条件含义说明
isNaN(tel.value)检查输入是否为数字如果为真(不是数字),弹出错误
tel.value.length !== 11检查长度是否为11位手机号必须是11位数字

3、手机号验证示例

输入值isNaN()length !== 11结果
13812345678false(是数字)11 !== 11 → false✅ 正确
1381234567false10 !== 11 → true❌ 长度错误
138123456789false12 !== 11 → true❌ 长度错误
1381234abcdtrue-❌ 包含字母

四、完整验证流程图

text

┌─────────────────────────────────────────────────────────────┐
│                     mr_verify() 函数执行                     │
└─────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────┐
│  步骤1:获取表单值                                           │
│  email = document.getElementById("email").value             │
│  password = document.getElementById("password").value       │
│  passwordRepeat = document.getElementById("passwordRepeat").value │
│  tel = document.getElementById("tel").value                 │
└─────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────┐
│  步骤2:空值验证                                             │
│  if (email === '' || email === null) → alert("邮箱不能为空") │
│  if (password === '' || password === null) → alert(...)      │
│  if (passwordRepeat === '' || passwordRepeat === null) → ... │
│  if (tel === '' || tel === null) → alert(...)                │
└─────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────┐
│  步骤3:密码一致性验证                                       │
│  if (password !== passwordRepeat) → alert("密码不一致")      │
└─────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────┐
│  步骤4:邮箱格式验证                                         │
│  apos = email.indexOf("@")                                  │
│  dotpos = email.lastIndexOf(".")                            │
│  if (apos < 1 || dotpos - apos < 2) → alert("邮箱格式错误")  │
└─────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────┐
│  步骤5:手机号格式验证                                       │
│  if (isNaN(tel)) → alert("手机号请输入数字")                 │
│  if (tel.length !== 11) → alert("手机号是11个数字")          │
└─────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────┐
│  步骤6:全部通过 → alert("注册成功!")                       │
└─────────────────────────────────────────────────────────────┘


五、代码存在的问题及改进建议

当前代码的问题

问题说明
邮箱验证不够严格abc@def 这种没有点号的格式也会通过
手机号验证不完整只验证了11位数字,没验证开头号码(如138、139等)
没有阻止空字符串提交return 后继续执行了邮箱验证
逻辑问题邮箱验证失败后没有 return,会继续执行后面的验证

修复后的完整代码

javascript

function mr_verify() {
    // 获取表单对象
    var email = document.getElementById("email");
    var password = document.getElementById("password");
    var passwordRepeat = document.getElementById("passwordRepeat");
    var tel = document.getElementById("tel");

    // 获取值并去除首尾空格
    var emailVal = email.value.trim();
    var passwordVal = password.value.trim();
    var passwordRepeatVal = passwordRepeat.value.trim();
    var telVal = tel.value.trim();

    // 1. 空值验证
    if (emailVal === '') {
        alert("邮箱不能为空!");
        email.focus();  // 让光标回到输入框
        return false;
    }
    if (passwordVal === '') {
        alert("密码不能为空!");
        password.focus();
        return false;
    }
    if (passwordRepeatVal === '') {
        alert("确认密码不能为空!");
        passwordRepeat.focus();
        return false;
    }
    if (telVal === '') {
        alert("手机号码不能为空!");
        tel.focus();
        return false;
    }

    // 2. 密码一致性验证
    if (passwordVal !== passwordRepeatVal) {
        alert("密码设置前后不一致!");
        passwordRepeat.focus();
        return false;
    }

    // 3. 密码强度验证(至少6位)
    if (passwordVal.length < 6) {
        alert("密码长度不能少于6位!");
        password.focus();
        return false;
    }

    // 4. 邮箱格式验证(正则表达式版本)
    var emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
    if (!emailRegex.test(emailVal)) {
        alert("邮箱格式错误!示例:user@example.com");
        email.focus();
        return false;
    }

    // 5. 手机号验证(完整版)
    // 验证是否为纯数字
    if (!/^\d+$/.test(telVal)) {
        alert("手机号只能包含数字!");
        tel.focus();
        return false;
    }
    // 验证长度是否为11位
    if (telVal.length !== 11) {
        alert("手机号必须是11位数字!");
        tel.focus();
        return false;
    }
    // 验证手机号开头(1开头,第二位是3-9)
    if (!/^1[3-9]\d{9}$/.test(telVal)) {
        alert("请输入有效的手机号码!");
        tel.focus();
        return false;
    }

    // 所有验证通过
    alert('注册成功!');
    return true;}


六、总结

验证类型当前代码实现验证规则建议改进
邮箱格式indexOf("@") + lastIndexOf(".")必须有@,@不在开头,@和.之间有字符使用正则表达式
手机号格式isNaN() + length !== 11必须是11位数字增加首位验证(1开头,第二位3-9)

一句话总结:邮箱验证通过查找 @ 和 . 的位置来判断格式是否正确;手机号验证通过 isNaN() 判断是否为数字,再判断长度是否为11位;但当前代码存在一些逻辑问题(邮箱验证失败后没有 return),且验证规则不够严格,建议使用正则表达式进行更精确的验证


标签: