ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

正则表达式

2021-10-30 22:36:21  阅读:178  来源: 互联网

标签:regex span String 正则表达式 var 字符串 name


1 概念

正则表达式:regex
          给字符串定义正确规则的字符串表达式
api:参考String
  • 涉及正则表达式的String方法
* boolean matches(String regex)  :判断当前字符串是否匹配参数正则表达式
* String replaceAll(String regex, String replacement) 
                                 :使用replacement替换当前字符串中与参数正则表达式匹配的所有子串
* String replaceFirst(String regex, String replacement)  
                                 :使用replacement替换当前字符串中与参数正则表达式匹配的第一个子串
* String[] split(String regex)   :使用与参数正则表达式匹配的所有子串 切割当前字符串               

2 正则表达式

2.0 需求:

判断是否是手机号
//验证手机号
public static boolean test01Phone(String number){
    if(number.length()!=11){
        return false;
    }
    //判断第一个字符是不是1
    if(number.charAt(0)!='1'){
        return false;
    }
    //第二个字符:3/4/5/6/7/8/9
    if(number.charAt(1)<'3'||number.charAt(1)>'9'){
        return false;
    }
    //其他字符必须是数字
    for (int i = 2; i <number.length(); i++) {
        char c=number.charAt(i);
        if(!Character.isDigit(c)){
            return false; 
        }
    }
    return true;
}
//正则表达式验证手机号
public static boolean test02Phone(String number){
    //定义一个字符串:表示规则
    String regex="1[3-9][0-9]{9}";//代码量少:但可读性差
    //调用string的方法 使用规则
    return number.matches(regex);
}

2.1 使用正则的方式:(了解)

//正则表达式验证手机号
public static boolean test02Phone(String number){
    //定义一个字符串:表示规则
    String regex="1[3-9][0-9]{9}";//代码量少:但可读性差
    //调用string的方法 使用规则
    return number.matches(regex);//调用的是字符串的matches方法
}
//正则表达式验证手机号
public static boolean test03Phone(String number){
    Pattern p = Pattern.compile("1[3-9][0-9]{9}");//创建一个正则对象  并关联正则规则
    Matcher m = p.matcher("aaaaab");//定义正则对象的matcher方法 关联需要判断的字符串  获取匹配器对象
    boolean b = m.matches();//调用匹配器对象的matches方法 获取结果
    //调用string的方法 使用规则
    return b;
}

2.2 总结

正则表达式 :使用一些特殊字符来表示固定的规则
学习重点: 有那些特殊字符  这些特殊字符都表示什么规则

3 正则表达式的规则

3.1 字符

x  : 非特殊字符x 就表示x
.  : 任意字符
\  : 转义字符
\. : 字符.
\\ : 字符\
^  : 字符串开头
$  : 字符串结尾

3.2 范围:[]

[acfg]  : acfg中的任意一个字符
[a-z]   :编码表中a到z中的任意一个字符
[a-zB-F] :编码表中a到z和B到F中的任意一个字符
[^a-f]   :除了a-f以外的任意一个字符
[a-z&&[d-g]]:取[a-z]与[d-g]的交集  等价于[d-g]

3.3 特殊范围

\d  :所有数字字符  等价于[0-9]
\D  :所有非数字字符  等价于[^0-9]
\w  :所有单词字符  等价于[a-zA-Z_0-9]
\W  :所有非单词字符  等价于[^a-zA-Z_0-9]
\s  :所有空白字符  等价于[ \t\n\x0B\f\r]
\S  :所有非空白字符  等价于[^\s]

3.4 次数:{}

a?  :  a出现小于等于1次
a*  :  a出现大于等于0次 
a+  :  a出现大于等于1次
a{n} :  a出现n次
a{n,} : a出现大于等于n次
a{n,m} : a出现大于等于n次 小于等于m次

3.5 复用:()

([a-z][0-9])+   :a3  a3b4n5

3.6 汉字

[\u4e00-\u9fa5]

4 测试方法

4.1 matches方法

//boolean matches(String regex)  :判断当前字符串是否匹配参数正则表达式
public static void main(String[] args) {
    while(true){
        System.out.println("请输入字符串!");
        String line=new Scanner(System.in).nextLine();
        test05(line);
    }
}
//1 判断用户名是否合法:由数字字母下划线组成  但不能以数字下划线开头  由6到8位
public static void test01(String s){
    //1 定义字符串表示正则规则
    String regex="[a-zA-Z][a-zA-Z0-9_]{5,7}";
    //2 调用字符串的方法判断
    boolean b=s.matches(regex);
    System.out.println(s+"::是否匹配规则:(由数字字母下划线组成  但不能以数字下划线开头  由6到8位)::"+b);
}
//2判断邮箱:miaotianbao@163.com
//        昵称@邮箱服务器名称 多个后缀
public static void test02(String mail){
    //1 定义字符串表示正则规则
    String regex=".+";//.+ 任意字符 规则出现大于等于1次 :a  aa  ab
    regex=".+@.+(\\.[a-zA-Z]+)+";//.+ 任意字符 规则出现大于等于1次 :a  aa  ab
    //2 调用字符串的方法判断
    boolean b=mail.matches(regex);
    System.out.println(mail+"::是否匹配规则:(是否是邮箱)::"+b);
}

//3 判断是不是中文名字
//        汉字:2-4个
public static void test03(String name){
    //1 定义字符串表示正则规则:[\u4e00-\u9fa5]
    String regex="[\u4e00-\u9fa5]{2,4}";
    //2 调用字符串的方法判断
    boolean b=name.matches(regex);
    System.out.println(name+"::是否匹配规则:(是否是名字)::"+b);
}
//4判断字符串是不是叠词:aaaaaa   bb  ccccc 11111
public static void test04(String s){
    //1 定义字符串表示正则规则:
    String regex="(.)\\1+";//()表示封装:组
    regex="^(.)\\1+$";//字符串开头和字符串结尾
    //(.) :把此位置处的字符封装为一个组:组名字从1开始
    //\\1 :第一组的结果再出现一次
    //\\1+ :第一组的结果再出现>=1次
    //2 调用字符串的方法判断
    boolean b=s.matches(regex);
    System.out.println(s+"::是否匹配规则:(叠词)::"+b);
}
//4判断字符串是不是叠词:格式如:aaaa1bb 前面是字母叠词  后面是字母叠词 中间是一个数字
public static void test05(String s){
    //1 定义字符串表示正则规则:
    String regex="([a-zA-Z])\\1+[0-9]([a-zA-Z])\\2+";//()表示封装:组
    //2 调用字符串的方法判断
    boolean b=s.matches(regex);
    System.out.println(s+"::是否匹配规则:(特殊叠词)::"+b);
}

4.2 split方法

//String[] split(String regex)   :使用与参数正则表达式匹配的所有子串 切割当前字符串 
public static void main(String[] args) {
    while(true){
        System.out.println("请输入字符串!");
        String line=new Scanner(System.in).nextLine();
        test02(line);
    }
}
//1 :abc12dfg87ouy09yt6  使用非数字字符进行切割
public static void test01(String s){
    //1 定义字符串表示正则规则
    String regex="\\D+";
    //2 调用字符串的方法判断
    String[] arr=s.split(regex);
    System.out.println(s+"::切割:(使用非数字字符进行切割)::"+Arrays.toString(arr));
}
//2:使用点切割
public static void test02(String s){
    String[] arr=s.split(".");//使用任意字符切割
    System.out.println(s+"::切割:(使用点切割)::"+Arrays.toString(arr));
    arr=s.split("\\.");
    System.out.println(s+"::切割:(使用点切割)::"+Arrays.toString(arr));
}

4.3 replaceAll方法

//String[] split(String regex)   :使用与参数正则表达式匹配的所有子串 切割当前字符串 
public static void main(String[] args) {
    while(true){
        System.out.println("请输入字符串!");
        String line=new Scanner(System.in).nextLine();
        test03(line);
    }
}
//1 :abc12dfg87ouy09yt6   获取其中的所有数字字符
public static void test01(String s){
    //2 调用字符串的方法判断
    String ss=s.replaceAll("\\D+", "");//把所有的非数字字符用空字符串替换
    System.out.println(s+"::替换::"+ss);
}
//2 :字符串转换:去除叠词:  111aaaabbb222cdeee111--->1ab2cde1
public static void test02(String s){
    //2 调用字符串的方法判断
    String ss=s.replaceAll("(.)\\1+", "$1");//replaceAll方法的第二个参数中的$1 表示第一个参数的第一组的内容
    System.out.println(s+"::替换::"+ss);
}
//3 :字符串转换:去除叠词:  1aa2a3bbb465dddd666ccca--->1a2a3b465d666ccca
// 数字 叠词字母 数字---替换为 数字 字母 数字   1bbbb2  ---1b2
public static void test03(String s){
    //2 调用字符串的方法判断
    String ss=s.replaceAll("([0-9])([a-zA-Z])\\2+([0-9])", "$1$2$3");//replaceAll方法的第二个参数中的$1 表示第一个参数的第一组的内容
    System.out.println(s+"::替换::"+ss);
}

5 js中使用正则表达式

5.1 注意事项

  • js中的正则表达式规则和java中完全相同
  • js中创建正则表达式两种方式
var regex1=/1[3-9][0-9]{9}/i;   //i表示不区分大小写
var regex2=new RegExp("1[3-9][0-9]{9}",i);
  • js中可以使用正则的方法是:正则表达式对象的 boolean test(str);参数是要被判断的字符串对象

5.2 案例1

<form  action="#"  method="get">
    <table>
        <tr>
            <th>用户名:</th>
            <td>
                <input  type="text" name="uname" placeholder="用户名必须是2-4个汉字"/>
                <span id="span_uname"> </span>
            </td>
        </tr>
        <tr>
            <th>密码:</th>
            <td>
                <input  type="text" name="upwd" placeholder="密码必须是6位数字"/>
                <span id="span_upwd"> </span>
            </td>
        </tr>
        <tr>
            <th>重复密码:</th>
            <td>
                <input  type="text" name="reupwd" placeholder="必须和密码一致"/>
                <span id="span_reupwd"> </span>
            </td>
        </tr>
        <tr>
            <th>性别:</th>
            <td>
                男:<input  type="radio" name="usex" value="男"/> |
                女:<input  type="radio" name="usex" value="女"/>
                <span id="span_usex"> </span>
            </td>
        </tr>
        <tr>
            <th>爱好:</th>
            <td>
                篮球:<input  type="checkbox" name="uenjoy" value="篮球"/> |
                足球:<input  type="checkbox" name="uenjoy" value="足球"/> |
                排球:<input  type="checkbox" name="uenjoy" value="排球"/> |
                台球:<input  type="checkbox" name="uenjoy" value="台球"/> |
                铅球:<input  type="checkbox" name="uenjoy" value="铅球"/> 
                <span id="span_uenjoy"> </span>
            </td>
        </tr>
        <tr>
            <th>邮箱:</th>
            <td>
                <input  type="text" name="umail" placeholder="邮箱格式必须正确"/>
                <span id="span_umail"> </span>
            </td>
        </tr>
        <tr>
            <th colspan="2"><input type="submit" value="提交"/></th>
        </tr>
    </table>
</form>

<script type="text/javascript">
    var bname=false;
    $(function(){
        $("input[name='uname']").bind("blur",pdUname);

    });
    //判断用户名是否正确
    function pdUname(){
        var uname=$("input[name='uname']").val();
        var regex=/^[\u4e00-\u9fa5]{2,4}$/;
        bname=regex.test(uname);
        if(bname){
            $("#span_uname").html("用户名可用!".fontcolor("blue").bold());
        }else{
            $("#span_uname").html("用户名必须是2-4个汉字!".fontcolor("red").bold());
        }
    }
</script>
<script type="text/javascript">
    var bpwd=false;
    $(function(){
        $("input[name='upwd']").bind("blur",pdUpwd);

    });
    //判断密码格式是否正确
    function pdUpwd(){
        var upwd=$("input[name='upwd']").val();
        var regex=/^\d{6}$/;
        bpwd=regex.test(upwd);
        if(bpwd){
            $("#span_upwd").html("密码可用!".fontcolor("blue").bold());
        }else{
            $("#span_upwd").html("密码必须是6个数字!".fontcolor("red").bold());
        }
    }
</script>
<script type="text/javascript">
    var brepwd=false;
    $(function(){
        $("input[name='reupwd']").bind("blur",pdReupwd);
    });
    //判断密码格式是否正确
    function pdReupwd(){
        //判断密码是否正确
        pdUpwd();
        if(!bpwd){
            brepwd=false;
            $("#span_reupwd").html("密码格式错误!".fontcolor("red").bold());
            return;
        }
        //判断密码和重复密码是否一致
        var reupwd=$("input[name='reupwd']").val();
        var upwd=$("input[name='upwd']").val();
        brepwd=reupwd==upwd;
        if(brepwd){
            $("#span_reupwd").html("重复密码正确!".fontcolor("blue").bold());
        }else{
            $("#span_reupwd").html("重复密码不正确!".fontcolor("red").bold());
        }
    }
</script>
<script type="text/javascript">
    var bsex=false;
    //判断性别是否选择
    function pdUsex(){
        var usex=$("input[name='usex']:checked").val();
        bsex=usex;
        if(bsex){
            $("#span_usex").html("性别已选!".fontcolor("blue").bold());
        }else{
            $("#span_usex").html("性别必须选择!".fontcolor("red").bold());
        }
    }
</script>
<script type="text/javascript">
    var benjoy=false;
    //判断爱好是否选择:至少两个
    function pdUenjoy(){
        var uenjoyColl=$("input[name='uenjoy']:checked");
        benjoy=uenjoyColl.length>=2;
        if(benjoy){
            $("#span_uenjoy").html("爱好已选择!".fontcolor("blue").bold());
        }else{
            $("#span_uenjoy").html("爱好至少两个!".fontcolor("red").bold());
        }
    }
</script>
<script type="text/javascript">
    var bmail=false;
    $(function(){
        $("input[name='umail']").bind("blur",pdUmail);
    });
    //判断邮箱是否正确
    function pdUmail(){
        var umail=$("input[name='umail']").val();
        var regex=/^.+@.+(\.[a-z]+)+$/i;
        bmail=regex.test(umail);
        if(bmail){
            $("#span_umail").html("邮箱格式正确!".fontcolor("blue").bold());
        }else{
            $("#span_umail").html("邮箱格式错误!".fontcolor("red").bold());
        }
    }
</script>
<script type="text/javascript">
    $(function(){
        $("form:first").bind("submit",function(){
            pdUname();
            pdUpwd();
            pdReupwd();
            pdUsex();
            pdUenjoy();
            pdUmail();
            return bmail && benjoy && bsex && brepwd && bpwd && bname;
        });
    });
</script>

5.3 案例2:方法复用

<form  action="#"  method="get">
    <table>
        <tr>
            <th>用户名:</th>
            <td>
                <input  type="text" name="uname" placeholder="用户名必须是2-4个汉字"/>
                <span id="span_uname"> </span>
            </td>
        </tr>
        <tr>
            <th>密码:</th>
            <td>
                <input  type="text" name="upwd" placeholder="密码必须是6位数字"/>
                <span id="span_upwd"> </span>
            </td>
        </tr>
        <tr>
            <th>重复密码:</th>
            <td>
                <input  type="text" name="reupwd" placeholder="必须和密码一致"/>
                <span id="span_reupwd"> </span>
            </td>
        </tr>
        <tr>
            <th>性别:</th>
            <td>
                男:<input  type="radio" name="usex" value="男"/> |
                女:<input  type="radio" name="usex" value="女"/>
                <span id="span_usex"> </span>
            </td>
        </tr>
        <tr>
            <th>爱好:</th>
            <td>
                篮球:<input  type="checkbox" name="uenjoy" value="篮球"/> |
                足球:<input  type="checkbox" name="uenjoy" value="足球"/> |
                排球:<input  type="checkbox" name="uenjoy" value="排球"/> |
                台球:<input  type="checkbox" name="uenjoy" value="台球"/> |
                铅球:<input  type="checkbox" name="uenjoy" value="铅球"/> 
                <span id="span_uenjoy"> </span>
            </td>
        </tr>
        <tr>
            <th>邮箱:</th>
            <td>
                <input  type="text" name="umail" placeholder="邮箱格式必须正确"/>
                <span id="span_umail"> </span>
            </td>
        </tr>
        <tr>
            <th colspan="2"><input type="submit" value="提交"/></th>
        </tr>
    </table>
</form>

<script type="text/javascript">
    var bname=false;
    $(function(){
        $("input[name='uname']").bind("blur",pdUname);
    });
    function pdUname(){
        bname=pd($("input[name='uname']"),/^[\u4e00-\u9fa5]{2,4}$/i,$("#span_uname"),"用户名必须是2-4个汉字!","用户名可用!");
    }
</script>
<script type="text/javascript">
    var bpwd=false;
    $(function(){
        $("input[name='upwd']").bind("blur",pdUpwd);
    });
    function pdUpwd(){
        bpwd=pd($("input[name='upwd']"),/^\d{6}$/i,$("#span_upwd"),"密码必须是6个数字!","密码可用!");
    }
</script>
<script type="text/javascript">
    var brepwd=false;
    $(function(){
        $("input[name='reupwd']").bind("blur",pdReupwd);
    });
    //判断密码格式是否正确
    function pdReupwd(){
        //判断密码是否正确
        pdUpwd();
        if(!bpwd){
            brepwd=false;
            $("#span_reupwd").html("密码格式错误!".fontcolor("red").bold());
            return;
        }
        //判断密码和重复密码是否一致
        var reupwd=$("input[name='reupwd']").val();
        var upwd=$("input[name='upwd']").val();
        brepwd=reupwd==upwd;
        if(brepwd){
            $("#span_reupwd").html("重复密码正确!".fontcolor("blue").bold());
        }else{
            $("#span_reupwd").html("重复密码不正确!".fontcolor("red").bold());
        }
    }
</script>
<script type="text/javascript">
    var bsex=false;
    //判断性别是否选择
    function pdUsex(){
        var usex=$("input[name='usex']:checked").val();
        bsex=usex;
        if(bsex){
            $("#span_usex").html("性别已选!".fontcolor("blue").bold());
        }else{
            $("#span_usex").html("性别必须选择!".fontcolor("red").bold());
        }
    }
</script>
<script type="text/javascript">
    var benjoy=false;
    //判断爱好是否选择:至少两个
    function pdUenjoy(){
        var uenjoyColl=$("input[name='uenjoy']:checked");
        benjoy=uenjoyColl.length>=2;
        if(benjoy){
            $("#span_uenjoy").html("爱好已选择!".fontcolor("blue").bold());
        }else{
            $("#span_uenjoy").html("爱好至少两个!".fontcolor("red").bold());
        }
    }
</script>
<script type="text/javascript">
    var bmail=false;
    $(function(){
        $("input[name='umail']").bind("blur",pdUmail);
    });
    function pdUmail(){
        bmail=pd($("input[name='umail']"),/^.+@.+(\.[a-z]+)+$/i,$("#span_umail"),"邮箱格式错误!","邮箱格式正确!");
    }
</script>
<script type="text/javascript">
    $(function(){
        $("form:first").bind("submit",function(){
            pdUname();
            pdUpwd();
            pdReupwd();
            pdUsex();
            pdUenjoy();
            pdUmail();
            return bmail && benjoy && bsex && brepwd && bpwd && bname;
        });
    });
</script>

<script type="text/javascript">
    function pd($node,regex,$span,errorMessage,successMessage){
        var b=regex.test($node.val());
        if(b){
            $span.html(successMessage.fontcolor("blue").bold());
        }else{
            $span.html(errorMessage.fontcolor("red").bold());
        }
        return b;
    }
</script>

标签:regex,span,String,正则表达式,var,字符串,name
来源: https://www.cnblogs.com/RenVei/p/15487721.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有