diff --git a/Common/Types/Email.ts b/Common/Types/Email.ts index f1d30f033b..4bcb009e3b 100644 --- a/Common/Types/Email.ts +++ b/Common/Types/Email.ts @@ -52,11 +52,16 @@ export default class Email extends DatabaseProperty { } public static isValid(value: string): boolean { - if (!value) { + // from https://datatracker.ietf.org/doc/html/rfc5322 + + const re: RegExp = + // eslint-disable-next-line no-control-regex + /(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/i; + const isValid: boolean = re.test(value); + if (!isValid) { return false; } - - return Zod.string().email().safeParse(value).success; + return true; } public override toJSON(): JSONObject {