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

家园网

讲讲手机号验证

网络 作者:本站 点击:

讲讲手机号验证

// 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;
    }

手机号验证代码逐字详解

您给出的这段手机号验证代码分为三个层次,从宽松到严格逐步验证。让我逐行详细讲解。


一、整体验证流程

text

输入手机号:13812345678
        ↓
第一层:是否为纯数字?      → ✅ 是纯数字
        ↓
第二层:长度是否为11位?    → ✅ 11位
        ↓
第三层:格式是否合法?      → ✅ 1开头,第二位是3
        ↓
    验证通过 ✅


二、第一层验证:是否为纯数字

javascript

if (!/^\d+$/.test(telVal)) {
    alert("手机号只能包含数字!");
    tel.focus();
    return false;}

1、正则表达式 ^\d+$ 详解

regex

/^\d+$/
│ ││ │
│ ││ └── 结束锚点
│ │└──── 加号(至少一个)
│ └───── 数字(0-9)
└─────── 开始锚点

部分含义说明
^开始锚点字符串必须从头开始匹配
\d数字匹配 0-9 之间的任意一个数字
+至少一个前面的 \d 至少出现1次,可以多次
$结束锚点字符串必须结束在这里

2、测试示例

输入^\d+$ 是否匹配说明
13812345678✅ 匹配全是数字
1381234abcd❌ 不匹配包含字母
138-1234-5678❌ 不匹配包含横线
138 1234 5678❌ 不匹配包含空格
(空字符串)❌ 不匹配长度至少1位

3、为什么需要这层验证?

  • 过滤掉包含字母、符号、空格的输入

  • 为后续的长度和格式验证打基础


三、第二层验证:长度是否为11位

javascript

if (telVal.length !== 11) {
    alert("手机号必须是11位数字!");
    tel.focus();
    return false;}

1、.length 是什么?

项目说明
含义字符串的属性,返回字符串的字符个数
来源JavaScript 规定好的字符串内置属性
示例"123".length → 3

2、验证逻辑

输入length!== 11结果
1381234567811false✅ 通过
138123456710true❌ 长度不足
13812345678912true❌ 长度超长

3、为什么需要这层验证?

  • 中国手机号固定为11位

  • 过滤掉位数不对的输入


四、第三层验证:格式是否合法

javascript

if (!/^1[3-9]\d{9}$/.test(telVal)) {
    alert("请输入有效的手机号码!");
    tel.focus();
    return false;}

1、正则表达式 ^1[3-9]\d{9}$ 详解

regex

/^1[3-9]\d{9}$/
││  │   │   ││
││  │   │   │└── 结束锚点
││  │   │   └─── 量词(9次)
││  │   └─────── 数字
││  └─────────── 字符集(3到9)
│└────────────── 数字1
└─────────────── 开始锚点

2、逐部分解析

部分含义说明
^开始锚点字符串必须从头开始
1数字1手机号第一位必须是1
[3-9]字符集第二位必须是3、4、5、6、7、8、9中的一个
\d{9}9位数字后面9位必须是数字
$结束锚点字符串必须结束在这里

3、\d{9} 详解

regex

\d{9}

部分含义
\d数字(0-9)
{9}量词,表示前面的 \d 必须恰好出现9次

对比

量词含义示例
{9}恰好9次\d{9} 匹配9个数字
{9,}至少9次\d{9,} 匹配9个或更多
{9,12}9到12次\d{9,12} 匹配9-12个

4、测试示例

手机号^1[3-9]\d{9}$原因
13812345678✅ 匹配1开头,第二位3,后面9位数字
13912345678✅ 匹配1开头,第二位3
15012345678✅ 匹配1开头,第二位5
18912345678✅ 匹配1开头,第二位8
13012345678✅ 匹配1开头,第二位3
19912345678✅ 匹配1开头,第二位9
11012345678❌ 不匹配第二位是1,不在3-9范围
12012345678❌ 不匹配第二位是2,不在3-9范围
1881234567❌ 不匹配只有10位,长度不够
188123456789❌ 不匹配12位,长度超长
188abcdefg❌ 不匹配包含字母

五、三层验证的关系图

text

┌─────────────────────────────────────────────────────────────┐
│                    输入手机号:188abcdefg                    │
└─────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────┐
│  第一层:/^\d+$/                                             │
│  检查:是否全是数字?                                         │
│  结果:包含字母 → ❌ 不通过                                   │
│  输出:"手机号只能包含数字!"                                 │
└─────────────────────────────────────────────────────────────┘
                              ↓(如果通过)
┌─────────────────────────────────────────────────────────────┐
│  第二层:telVal.length !== 11                                │
│  检查:长度是否为11位?                                       │
│  结果:长度不对 → ❌ 不通过                                   │
│  输出:"手机号必须是11位数字!"                               │
└─────────────────────────────────────────────────────────────┘
                              ↓(如果通过)
┌─────────────────────────────────────────────────────────────┐
│  第三层:/^1[3-9]\d{9}$/                                     │
│  检查:格式是否合法?                                         │
│  结果:第二位不对 → ❌ 不通过                                 │
│  输出:"请输入有效的手机号码!"                               │
└─────────────────────────────────────────────────────────────┘


六、为什么不用一个正则表达式一次验证完?

可以,但分层验证更好

javascript

// 一次验证的写法if (!/^1[3-9]\d{9}$/.test(telVal)) {
    alert("请输入有效的手机号码!");
    return false;}

分层验证的优点

优点说明
错误提示更精确用户能知道具体是什么问题(有字母/长度不对/格式不对)
用户体验更好而不是笼统地说"手机号无效"
调试更方便容易定位问题

七、手机号规则总结

位置要求说明
第1位必须是 1中国手机号都以1开头
第2位必须是 3-9目前支持3-9
第3-11位必须是数字后面9位任意数字

常见手机号段示例

号段第二位示例
13x3130、131、132、133、134、135、136、137、138、139
15x5150、151、152、153、155、156、157、158、159
18x8180、181、182、183、184、185、186、187、188、189
19x9190、191、192、193、195、196、197、198、199

八、总结

验证层次正则/条件作用错误提示
第一层/^\d+$/验证是否全是数字"手机号只能包含数字!"
第二层length !== 11验证长度是否为11位"手机号必须是11位数字!"
第三层/^1[3-9]\d{9}$/验证格式是否合法"请输入有效的手机号码!"

一句话总结:手机号验证分三步走——先验证是否为纯数字,再验证长度是否为11位,最后验证开头是否为1且第二位在3-9之间,这样逐层过滤可以给用户更精确的错误提示


标签: