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

    JS正则表达式 匹配与搜索

    使用正则的查找替换

    JS正则表达式详解及身份证号码验证(简易版)

    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
    

    一、方括号,圆括号

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

    JS正则表达式详解及身份证号码验证(简易版)

    • [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
    

    二、修饰符

    JS正则表达式详解及身份证号码验证(简易版)

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

    三、元字符

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

    JS正则表达式详解及身份证号码验证(简易版)

    用法:

    • 查找任意字符 ,用点 "."代替
    • 查找 单词字符 用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]+
    以上四种写法都表示  匹配至少一位的数字
    

    四、量词

    JS正则表达式详解及身份证号码验证(简易版)

    用法:

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

    总结

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。