js判断是不是一个合法的邮箱地址

/**
 * @example cpbox.io √
 * @example xxx.cpbox.io √
 * @example xxx.xxx.cpbox.io √
 * @example xxx.xxx.xxx.cpbox.io √
 * @example a.io √
 * @example a.a.io √
 * @example a.a.a.io √
 * @example cp-box.io √
 * @example cp-cp-box.io √
 * @example -cpbox.io ×
 * @example cpbox-.io ×
 * @example -cpbox-.io ×
 * @example cp--box.io ×
 * @example cpbox.i ×
 */
export function isDomain(text: string) {
  // 允许:数字, 字母, -
  // 由一个或多个部分组成,以一个点分开
  // 第二部分必须至少是两个字符,例如:.com, .org, .cc
  // 在开始或结束时不能使用连字符
  return /^(([a-z0-9]+\-?(?!\-))*[a-z0-9]+\.)+[a-z]{2,}$/.test(text);
}

/**
 * @example [√]
 *  j-doe1234@domain.com
    sarah.smith85@domain.com
    jessy_luther@domain.com
    my.email123@domain.com
    sales@domain.com 
    username@domain.orgusername@mail-provider.cc
    username@example.net
    username@companywebsite.com
    username@techcompany.com
  
  @example [×]
    .cpbox@domain.com
    cp--box@domain.com
    cp__box@domain.com
    cp..box@domain.com
    cp.-box@domain.com
    cp._box@domain.com
    cpbox.@domain.com
    cpbox-@domain.com
    cpbox_@domain.com
 */
export function isEmail(text: string) {
  const [account, ...domains] = text.split("@");
  if (!account || !domains.length) return false;

  // 允许:数字, 字母, _, -, .
  if (!/^[a-z0-9._-]+$/.test(account)) return false;

  // 英文句号(.)不允许出现在开头或结尾
  if (/^\.|\.$/.test(account)) return false;

  // 不允许出现连续的句号或特殊字符(例如:john…doe@company.com)
  if (/[.\-_](?=[.\-_])/.test(account)) return false;

  // 特殊字符后面应该有一个或多个字母或数字
  if (/[.\-_](?![a-z0-9]+)/.test(account)) return false;

  while (domains.length) {
    const domain = domains.pop()!;
    const isValidDomain = isDomain(domain);
    if (!isValidDomain) return false;
  }

  return true;
}

参考规则:Snov.io - 什么是有效的邮箱地址格式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值