正则表达式(java/JS)

在项目的开发中,经常有一些特定规则的字符串,如手机号、邮箱、或者用户输入的密码等等。这些字符串都有一些特定的格式,按照这种格式去校验用户输入的字符串是否合法,在很大程度上简化了代码。而这种特定格式的校验,我们称之为正则表达式(英语:Regular Expression,其在代码中经常简写为regex、regexp或re)。

下面我将举三个最常用的例子,来初步说明正则表达式。

ex 1:手机号正则表达式的写法:

 java:

String PHONE_NUMBER_REG = "^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\\d{8}$";

java中使用“^”开头、“$”结尾,使用“|”表示 或 。“[0-9]”或者“\\d”表示0-9的数字(第一个"\"代表转义字符),“{n}”表示其相邻的那个表达式需要n个该格式的字符。手机号格式便是如上所示的表达式,具体使用方法:phoneNumber.matchs(PHONE_NUMBER_REG)

JS:

"18016381232".match(/^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/)

JS中写法和java中很类似,但是开头和结尾处有所不同,此处开头使用“/^”,结尾使用“/$”,调用match方法直接匹配即可。

ex 2:邮箱正则表达式写法:

      邮箱需要满足的逻辑:

        (1)@之前必须you内容且只能是字母(大小写)、数字、下划线(_)、减号(-)、点(.);

        (2)@和最后一个点(.)之间必须有内容且只能是字母(大小写)、数字、点(.)、减号(-),且两个点不能挨着;

        (3)最后一个点(.)之后必须有内容且只能是字母(大小写)、数字且长度大于等于2个字节、小于等于6个字节。

    ^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$

其中“+”号表示其前面的子表达式需要至少一个(一个或多个),等价于{1,}。“\.”代表点(.),此处“\”为转义字符。“*”代表0个或多个,等价于{0,}。{2,6}则表示其前面的子表达式至少2个,最多6个。

ex 3:密码正则表达式(以下表达式不一定能满足,看自己的需求):

     密码需要满足的的逻辑:

          (1)密码长度不能小于八位;

          (2)密码需包含字母(区分大小写)、数字、特殊字符中的至少三种字符。

    //判断密码是否包含数字:包含返回1,不包含返回0
    int i = password.matches(".*\\d+.*") ? 1 : 0;
    //判断密码是否包含大写字母:包含返回1,不包含返回0
    int j = password.matches(".*[A-Z]+.*") ? 1 : 0;
    //判断密码是否包含小写字母:包含返回1,不包含返回0
    int k = password.matches(".*[a-z]+.*") ? 1 : 0;
    //判断密码是否包含特殊符号(~!@$%^&*()_+|<>,.?/:;'[]{}\):包含返回1,不包含返回0
    int l = password.matches(".*[~!@$%^&*()_+|<>,.?/:;'\\[\\]{}\"]+.*") ? 1 : 0;
    //获取密码长度
    int m = password.length();
    if((i+j+k+l) < 3 || m < 8) {
        System.out.println("密码不符合设定的规则");
    }

其中“?”表示0个或1个,等价于{0,1}。

以上便是我对正则表达式的一点点总结。写的不好,欢迎批评指正!

-----不积小流,无以成江海;不积跬步,无以至千里。


猜你喜欢

转载自blog.csdn.net/alicewang99/article/details/80940141