• 常用正则表达式(手机号、邮箱、URL地址、身份证等等)


    一、前言

      不好的习惯:1、每一次用到正则都是上网copy一份,也没有去学习思考,看看都是什么意思;

            2、一个项目里不同的地方用到了相同的校验,一直在重复的copy代码,并没有统一起来,万一哪天要修改规则,若是多人开发,每个人的正则校验不尽相同,改起来就很麻烦。

      先记录一下,后续慢慢学习,最后自己能看懂并会写常用的正则。

    二、正则基本知识点

      1、横向模糊匹配{}

        一个正则可以匹配的字符串的长度不是固定的,使用量词可以达到这种目的。

        量词:比如{m , n} :表示连续出现最少 m 次,最多 n 次;跟在一个字符的后面就表示对该字符的限定。

        比如邮箱的校验:/^w+@[a-z0-9]+.[a-z]{2,4}$/,写在了[a-z]后面,表示可以有2到4位的字母;

        比如手机号的校验: /^1[3456789]d{9}$/,跟在了d后面,表示需要出现9个数字       

    {m , n} :表示连续出现最少 m 次,最多 n 次
    {m , }   :表示至少出现m次
    {m}      :表示出现m次
    ?      :等价于{0,1} 表示出现或不出现
    +        :等价于{1,} 表示至少出现1次
    *        :等价于{0,} 表示出现任意次,可以不出现

        比如邮箱的校验:/^w+@[a-z0-9]+.[a-z]{2,4}$/,写在了[a-z0-9]后面,可以出现0到9或者字母a-z的任意一个,至少一次

      2、纵向模糊匹配[]

        正则匹配的字符串对于某一位置上的字符来说,它可以有多种可能,不局限于某一类型,使用字符组可以达到这种目的。

        字符组:比如[abc],表示该字符是可以字符 "a"、"b"、"c" 中的任何一个。对于这一位置来说,我们可以有3种可能性。

        比如手机号的校验: /^1[3456789]d{9}$/,它在第二个位置,根据一般手机运营商来说,提供手机第二位的数字可以是3到9的任意一个,才符合规范。

        如果字符组里表示的字符特别多,可以使用范围表示法,用连字符-来省略和缩写。

        比如邮箱的校验:/^w+@[a-z0-9]+.[a-z]{2,4}$/,它跟在@后面,根据我们邮箱的规范可知,@后面需要的是0到9或者字母a-z的任意一个

      3、常用的简写形式

        d  :表示[0-9],表示一位数字
        D  :表示[^0-9],表示除数字外的任意字符
        w  :表示[0-9a-zA-Z_],表示数字、大小写字母和下划线
        W  :表示[^0-9a-zA-Z_],非单词字符

        比如手机号的校验: /^1[3456789]d{9}$/,结合后面的量词,d在第三位,表示从第三位起,一共9位都是数字

    三、表单常用

      可以把一个项目里用到的校验规则写在一个工具类里,这样可以保证一个项目里对同一个东西的校验是统一的,不用重复多余的堆砌代码。

    class Validator {
        //身份证校验
        idCard(val){
            return /(^[1-9]d{5}(18|19|([23]d))d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)d{3}[0-9Xx]$)|(^[1-9]d{7}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)d{3}$)/.test(val)
        }
        
        //手机号校验
        phnoe(val){
            return /^1[3456789]d{9}$/.test(val)
        }
        
        //邮箱
        email(val){
            return /^w+@[a-z0-9]+.[a-z]{2,4}$/.test(val)
        }
        
        //普通护照
        passport(val){
            return /^((1[45]d{7})|(Gd{8})|(Pd{7})|(Sd{7,8}))?$/.test(val)
        }
        
        //台胞证
        taiwanID(val){
            return /^[a-zA-Z][0-9]{9}$/.test(val)
        }
        //港澳身份证
        hkId(val){
            return /^([A-Z]d{6,10}(w1)?)$/.test(val)
        }
        
        //中文
        chineseWord(val){
            return  /^[u4e00-u9fa5]*$/.test(val)
        }
        
        //密码(不能是纯数字或字母)
        psdRxp(val){
            const numberRegexp = /^d+$/;
            const letterRegexp = /^[a-zA-Z]+$/;
            return numberRegexp.test(val) || letterRegexp.test(val)
        }
    }
    export default new Validator();

    参考书目:《javascript正则表达式迷你书》

  • 相关阅读:
    蛙蛙请教:把一段c算法代码转换成c#代码。
    和病毒折腾了两天
    WawaKM预览版发布,欢迎大家测试反馈哦
    (转)深度分析如何在Hadoop中控制Map的数量
    [转载]JAVA操作符
    (转)Hive Index
    Hadoop++:Hadoop的局部性能改良
    深入了解Hive Index具体实现
    Linux echo命令
    (转)带索引的mapReduce
  • 原文地址:https://www.cnblogs.com/songForU/p/12585344.html
Copyright © 2020-2023  润新知