亲宝软件园·资讯

展开

JS正则验证身份证号码

莱克博尔德 人气:0

JS正则表达式 匹配与搜索

使用正则的查找替换

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

一、方括号,圆括号

方括号用于查找某个范围内的字符

举例:

var str = "wer2ty4d56fg78hj987k";
console.log(str.match(/[0-9]/g));	//匹配任意一位数字
console.log(str.match(/[0-9][0-9]/g));	//匹配任意两位数字--输出56 78 98

二、修饰符

使用g修饰符,表示匹配所有

三、元字符

元字符(Metacharacter)是拥有特殊含义的字符

用法:

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}$");	

SFZ号码验证(简易版)

下面简易版只是基本的格式判定只可以用于基础的表单验证

存在不足的地方包括:

SFZ号码规则:

SFZ号码组成包括:地址码(6位)+年份码(4位)+月份码(2位)+日期码(2位)+顺序码(3位)+校验码(1位)。SFZ号码共计18位。

下面分别说明不同码的规则,并写出对应的正则表达式

1.地址码

/ ^[1-9]\d{5}/

2.年份码

/(19|20)\d{2}/

3.月份码

/((0[1-9])|(1[0-2]))/

4.日期码

/(([0-2][1-9])|10|20|30|31)/

5.顺序码

长度为任意的3位数字

可以写为:

/\d{3}/

6.校验码

/[0-9Xx]/

7.SFZ号码正则表达式汇总

/^[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"));

总结

加载全部内容

相关教程
猜你喜欢
用户评论