700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > JS正则表达式-附身份证号码验证(简易版)

JS正则表达式-附身份证号码验证(简易版)

时间:2018-10-06 07:00:24

相关推荐

JS正则表达式-附身份证号码验证(简易版)

文章目录

JS正则表达式 匹配与搜索一、方括号,圆括号二、修饰符三、元字符四、量词身份证号码验证(简易版)身份证号码规则:1.地址码2.年份码3.月份码4.日期码5.顺序码6.校验码7.身份证号码正则表达式汇总

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 45678console.log(pat.test(pat));//return 45678console.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

查找空白字符(回车、空格、Table等)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 truevar pat = new RegExp("^[0-9]+");//匹配子串"er2567thj"中是否是以数字开头:console.log(pat.test("er2567thj")); //return falsevar 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}[\d|X|x]$/

测试代码:

//输出 trueconsole.log(p.test("11010519491231002X"));//输出 false 不能以0开头console.log(p.test("01010519491231002X"));//输出 false 年份不能以17开头console.log(p.test("11010517491231002X"));//输出 false 月份不能为13console.log(p.test("11010519491331002X"));//输出 false 日期不能为32console.log(p.test("11010519491232002X"));//输出 false 不能以a结尾console.log(p.test("11010519491232002a"));


本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。