邮箱正则校验邮箱账号是否合法

        项目上线后定时发送邮件出现问题,后台代码无报错。经检查发现有一个收件人邮箱地址错误导致所有人都收不到邮件,记录如下:

错误邮箱地址如下: 'test@1653.com test@163.com'

        邮箱地址没有用, 分隔开导致解析收件人出现问题。需要修改程序对收件人进行过滤,避免再次出现邮件发不出去 

常用的正则表达式元字符: 

  • . (小数点):匹配任意字符。
  • *:匹配前一个字符出现0次或多次。
  • +:匹配前一个字符出现1次或多次。
  • ?:匹配前一个字符出现0次或1次。
  • ^:匹配字符串的开始位置。
  • $:匹配字符串的结束位置。
  • []:匹配指定的字符集合。
  • ():标记子表达式的起始和结束位置,可以将子表达式的匹配结果捕获到一个分组中。
  • |:匹配两个或多个可选模式的其中一个。

邮箱格式

         在验证邮箱格式时,最重要的是了解邮箱的格式规范。一般来说,一个标准的电子邮箱地址由以下四个部分组成:

  • 用户名(username):由一系列字母、数字、下划线、破折号或点号组成,不能以点号或破折号开头或结尾,并且不能连续出现两个点号或破折号。
  • @符号(@):用于分隔邮箱用户名和邮件服务商的域名。
  • 邮件服务商域名(domain name):由一级域名和二级域名组成,二者之间用一个点号分隔。
  • 后缀(suffix):两个到六个字符组成的域名后缀,如.com、.cn、.edu等。

综合起来,一个典型的电子邮箱地址可以表示为:

username@domain.name.suffix

 验证邮箱格式的目标是匹配用户名、域名和后缀这三部分的规范要求。

 示例

  1. 验证用户名:
     
    /^[A-Za-z0-9]+([-._][A-Za-z0-9]+)*$/
    
    解释:该正则表达式中,由A-Za-z0-9表示可以包含大小写字母和数字,由+表示可以出现一次或多次,由([-._][A-Za-z0-9]+)*表示可以包含连字符、点号或下划线,且不能以它们开始或结束,连续不能出现两个或以上。
     
  2. 验证域名:
    /^([A-Za-z0-9]+(-[A-Za-z0-9]+)*\.)+[A-Za-z]{2,}$/
    

    解释:该正则表达式中表示一个或多个由大小写字母、数字和连字符组成的字段,其中第一个必须为字母或数字,最后一个字段必须为两个或以上字母,且长度在2到63之间。

  3. 验证后缀:

    /^([A-Za-z]{2,6}|[A-Za-z]{2,4}\.[A-Za-z]{2,3})$/
    

    解释:该正则表达式中,使用管道符号|表示或的关系,即后缀可以为两到六位字母或两个字母加一个点号加两到三个字母。

综合以上三个正则表达式,可以得出验证完整邮箱地址的表达式:

/^[A-Za-z0-9]+([-._][A-Za-z0-9]+)*@[A-Za-z0-9]+(-[A-Za-z0-9]+)*(\.[A-Za-z]{2,6}|[A-Za-z]{2,4}\.[A-Za-z]{2,3})$/

过滤代码如下:

    // 邮箱正则
    private static final String EMAIL_REGEX = "^[A-Za-z0-9]+([-._][A-Za-z0-9]+)*@[A-Za-z0-9]+(-[A-Za-z0-9]+)*(\\.[A-Za-z]{2,6}|[A-Za-z]{2,4}\\.[A-Za-z]{2,3})$";
    
    /**
     * 收集邮箱地址,过滤问题邮箱和重复邮箱,打印错误邮箱收件人工号
     * @param emailList
     * @return
     */
    public String getCollectEmail(List<Record> emailList) {
        return emailList.stream().filter(emailRecord -> {
            String email = emailRecord.getStr("EMAIL");
            String empno = emailRecord.getStr("EMPNO");
            if (!(isValidEmail(email))) {
                LogKit.warn(empno + "邮箱格式有问题,请排查");
                return false;
            }
            return true;
        }).map(emailRecord -> emailRecord.getStr("EMAIL").toLowerCase())
                .distinct()
                .collect(Collectors.joining(","));
    }

    /**
     * 判断邮箱是否有效
     * @param email
     * @return
     */
    public static boolean isValidEmail(String email) {
        if (StrKit.isBlank(email)) {
            return false;
        }
        Pattern pattern = Pattern.compile(EMAIL_REGEX);
        Matcher matcher = pattern.matcher(email);
        return matcher.matches();
    }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值