/**
* @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;
}
js判断是不是一个合法的邮箱地址
于 2023-07-31 14:04:59 首次发布