加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

常用正则表达式案例(不定期更新)

发布时间:2020-12-14 00:45:43 所属栏目:百科 来源:网络整理
导读:如果大家对正则没有一点基础,可以查看这几篇文章: Java中正则表达式的基本使用 正则表达式中的基本正则规则详解01 正则表达式中的基本正则规则详解02 进入正题: 邮箱验证 电子邮箱由: “用户名@主机域名”组成。 用户名的开头不能由点号组成,不是第一位的

如果大家对正则没有一点基础,可以查看这几篇文章:
Java中正则表达式的基本使用
正则表达式中的基本正则规则详解01
正则表达式中的基本正则规则详解02

进入正题:

邮箱验证

  • 电子邮箱由: “用户名@主机域名”组成。
  • 用户名的开头不能由点号组成,不是第一位的位置就可以添加点号,但是点号不能够串联>=两个。
  • 用户名的合法用户名由大小写英文字母(不区分大小写)、数字、下划线(可以串联任意个,也可以写在用户名开头)、横线(“-“,”-“可以串联任意个,但是不能够写在用户名开头)、点号(不能串联超过>=2个,不能写在用户名开头)组成。
  • 主机域名由大小写英文字母、数字、横线(“-“,不可以串联>=2个,不能写在域名开头和结尾)、点号组成。域名不能有下划线,大家可以去注册域名看看,域名是不能有下划线的哦。
  • 并且用户名和主机域名是不区分大小写的。在处理发送的时候都是会用小写。
  • 大家如果不相信可以到mail.qq.com试试,到写信界面的收信人的输入框上面试试。
  • 读者大可放心的发送信件,只是腾讯服务器会给你回信说,发不出去。并且会返回给你,收信人的小写地址。

这是腾讯qq邮箱的正则表达验证(从js中提取的):^(w)+(.w+)*@(w)+((.w+)+)$

个人感觉qq邮箱的验证有些地方有点影响效率。
这样写应该好一点:^(?:w+)(?:.w+)*@(?:w+)(?:(?:.w+)+)$ 就是让qq邮箱原本的匹配不会保存已经匹配成功的字符串。

但是,貌似这条js只是客户端的js,不是服务端的。所以客户端的匹配不严谨。而且,当主机域名的开始位置有横线时,腾讯那边也能够匹配成功!所以腾讯那边还是匹配得有错的。但是邮箱的要求还是按照上面的几条规则组成,读者可以根据腾讯qq给出的邮箱正则修改。

下面给出我自己写的邮箱正则规则:(大家看到正则很长不必害怕,其实仔细一看还是能够懂得。要结合上面邮箱的组成规则一起看。想当初作者我也是看到一条正则邮箱验证看不懂才去学习正则的。本篇开始也给出了学习正则的相关博客,从0到能够看懂下面的正则表达式)

^(?:w+)[(?:.[-w]+)(?:[-w]+)]*@(?:[a-zA-Z0-9]+)(?:-[a-zA-Z0-9]+)*(?:.[a-zA-Z0-9]+)+$
//也可以进行适当的简化,下面是简化后
^(?i)(?:w+)[(?:.[-w]+)(?:[-w]+)]*@(?:[a-z0-9]+)(?:-[a-z0-9]+)*(?:.[a-z0-9]+)+$

下面给出邮箱测试程序:

import java.util.Scanner;

public class pa36{
    public static void main(String args[]){
        Scanner scanner=new Scanner(System.in);
        //^(?:w+)(?:.w+)*@(?:w+)(?:(?:.w+)+)$//腾讯加强后的简化正则
        //^(w)+(.w+)*@(w)+((.w+)+)$//腾讯qq邮箱验证正则(我从js源码中提取的)
        //自己写的正则:^(?:w+)[(?:.[-w]+)(?:[-w]+)]*@(?:[a-zA-Z0-9]+)(?:-[a-zA-Z0-9]+)*(?:.[a-zA-Z0-9]+)+$
        String regex="^(?i)(?:w+)[(?:.[-w]+)(?:[-w]+)]*@(?:[a-z0-9]+)(?:-[a-z0-9]+)*(?:.[a-z0-9]+)+$";

        System.out.println("请输入邮箱地址...");
        boolean flag=false;
        while(scanner.hasNext()){
            if(flag)
                System.out.println("请输入邮箱地址...");
            flag=true;
            String sta=scanner.next();

            if(sta.matches(regex)){
                System.out.println(sta+" 是一个合法邮箱!!");
            }else{
                System.out.println(sta+" 不是一个合法邮箱!!");
            }
        }
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读