JS正则表达式详解及身份证号码验证(简易版)
本文详细介绍JavaScript中正则表达式的基础用法,包括方括号、圆括号、修饰符、元字符及量词。重点讲解如何利用正则表达式构建简易版身份证号码验证规则,涵盖地址码、年份、月份、日期、顺序码及校验码的匹配逻辑,并提供测试代码示例。
JavaScript中正则表达式用于字符串的匹配与搜索操作。
在JavaScript中,可以利用正则表达式执行查找和替换操作。


regexp()方法返回匹配子串的起始位置,若未找到匹配项则返回-1。
match()方法用于执行检索,返回包含所有匹配结果的数组。
var str = "wert45678yuiytrew";
//使用正则匹配子串str中的数字
console.log(str.match(/[0-9]+/)); //return 45678
//使用RegExp(不用双斜线,用引号)
var pat = new RegExp("[0-9]+");
console.log(str.match(pat)); //return 45678
console.log(pat.test(pat)); //return 45678
console.log(pat.exec(str)); //return 45678
一、方括号与圆括号的使用
方括号用于定义字符范围,查找范围内的任意字符。

- [abc]:匹配方括号内任意一个字符(a、b或c)即符合条件。
- [^abc]:^表示取反,匹配除a、b、c以外的任意字符均符合条件。
- [0-9]:匹配0到9之间的任意数字,符合条件。
- [A-z]:匹配从大写字母A到小写字母z之间的任意字符,符合条件。
- (red|blue|green):中括号匹配单个字符,圆括号用于匹配多个字符(单词)。查找指定的任意选项,匹配到其中任意一个单词即符合条件。
举例说明如下。
var str = "wer2ty4d56fg78hj987k";
console.log(str.match(/[0-9]/g)); //匹配任意一位数字
console.log(str.match(/[0-9][0-9]/g)); //匹配任意两位数字--输出56 78 98
二、修饰符的应用

使用g修饰符表示全局匹配,即匹配所有符合条件的子串。
三、元字符详解
元字符(Metacharacter)是指具有特殊含义的字符。

具体用法如下。
- 查找任意单个字符,使用点号 "." 代替。
- 查找单词字符使用\w,查找非单词字符使用大写\W。
- 查找数字使用\d,查找非数字使用大写\D。
- 查找空白字符(如回车、空格、Tab等)使用\s,查找非空白符使用大写\S。
var str = "wer2ty4d56fg78hj987k";
//匹配任意两位数字--输出56 78 98:
console.log(str.match(/\d{2}/g));
//匹配任意两位或三位数字--输出56 78 987:
console.log(str.match(/\d{2,3}/g));
var str = "wer2ty4d56fg78hj987k";
\d{1,}
[0-9]{1,}
\d+
[0-9]+
以上四种写法都表示 匹配至少一位的数字
四、量词的使用

具体用法如下。
var str = "wer2ty4d56fg78hj987k";
//匹配任意两位数字--输出56 78 98:
console.log(str.match(/[0-9]{2}/g));
//匹配任意两位或三位数字--输出56 78 987:
console.log(str.match(/[0-9]{2,3}/g));
上述匹配方式属于模糊匹配。
下面介绍精确匹配的方式。
var str = "wer2ty4d56fg78hj987k";
var pat = new RegExp("[0-9]+");
//匹配子串"er2567thj"中是否含有数字:
console.log(pat.test("er2567thj")); //return true
var pat = new RegExp("^[0-9]+");
//匹配子串"er2567thj"中是否是以数字开头:
console.log(pat.test("er2567thj")); //return false
var pat = new RegExp("[0-9]+$");
//匹配子串"er2567thj"中是否是以数字结尾:
console.log(pat.test("er2567thj")); //return false
//精确匹配:
//子字符串必须以数字开头(^表示前面不能有任何东西,$表示后面不能有任何东西),
var pat = new RegExp("^[0-9]+$");
console.log(pat.test("er2567thj")); //return false 匹配子串是否为纯数字
精确匹配示例如下。
//精确匹配任意6位数字 ---邮政编码:
var pat = new RegExp("^[0-9]{6}$");
身份证号码验证(简易版)
以下简易版仅进行基本格式判定,适用于基础的表单验证场景。
该版本存在以下不足之处:
- 地址码判定不精确,我国不存在16、26开头的地区,以9开头的可能是外国人移民中国的身份证号码。
- 日期判定不精确,例如19490231可通过验证,但2月没有31号。
- 校验码是由前17位本体码通过算法计算得出,简易版并未对此进行校验。
身份证号码结构规则:
身份证号码由地址码(6位)+年份码(4位)+月份码(2位)+日期码(2位)+顺序码(3位)+校验码(1位)组成,共计18位。
下面分别说明不同码段的规则,并给出对应的正则表达式。
1.地址码
- 长度为6位。
- 全部由数字组成。
- 第1位为1-9,后5位为0-9的数字。总结以上,地址码写为:
/ ^[1-9]\d{5}/
2.年份码
- 长度为4位。
- 前两位数字以18、19、20开头(若不需要18开头的年份,可去掉)。
- 后两位数字为0-9之间。总结以上,年份码可以写为:
/(19|20)\d{2}/
3.月份码
- 长度为2位。
- 第一位数字为0时,第二位数字为1-9。
- 第一位数字为1时,第二位数字为0-2。总结以上,月份码可以写为:
/((0[1-9])|(1[0-2]))/
4.日期码
- 长度为2位。
- 第一位数字为0-2时,第二位数字为1-9。
- 或者单独的10、20、30、31。总结以上,日期码可以写为:
/(([0-2][1-9])|10|20|30|31)/
5.顺序码
长度为任意的3位数字。
可以写为:
/\d{3}/
6.校验码
- 长度为1位。
- 可以是数字。
- 可以是不区分大小写的字母x或X。总结以上,可以写为:
/[0-9Xx]/7.身份证号码正则表达式汇总
/^[1-9]\d{5}(19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}{0-9Xx}$/
测试代码示例如下。
//输出 true
console.log(p.test("11010519491231002X"));
//输出 false 不能以0开头
console.log(p.test("01010519491231002X"));
//输出 false 年份不能以17开头
console.log(p.test("11010517491231002X"));
//输出 false 月份不能为13
console.log(p.test("11010519491331002X"));
//输出 false 日期不能为32
console.log(p.test("11010519491232002X"));
//输出 false 不能以a结尾
console.log(p.test("11010519491232002a"));
总结
到此这篇关于JS正则表达式详解及身份证号码验证的文章就介绍到这了,更多相关JS正则验证身份证号码内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
ES6模块化中js文件怎么用import和export交互
2026-11-05 17:00:48
JS读取本地文件时报错或无响应的常见原因
2026-11-05 16:32:31
let、const与var的区别:JavaScript变量声明最佳实践
2026-11-05 14:16:38
JS中直接定义静态二维数组的字面量写法
2026-11-05 14:16:08
JS 怎么查找字符串中所有匹配项的位置
2026-11-05 14:15:53
