EmailHelper.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. const { parseOneAddress } = require('email-addresses')
  2. // available for frontend in https://github.com/overleaf/internal/blob/19d432c70b173752ee7c6d8978dd6be16b042921/services/web/frontend/js/shared/utils/email.tsx#L4
  3. const EMAIL_REGEXP =
  4. // eslint-disable-next-line no-useless-escape
  5. /^([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
  6. function getDomain(email) {
  7. email = parseEmail(email)
  8. return email ? email.split('@').pop() : null
  9. }
  10. function parseEmail(email, parseRfcAddress = false) {
  11. if (typeof email !== 'string' || !email) {
  12. return null
  13. }
  14. if (parseRfcAddress) {
  15. const result = parseOneAddress(email)
  16. if (!result?.address) {
  17. return null
  18. }
  19. email = result.address
  20. }
  21. if (email.length > 254) {
  22. return null
  23. }
  24. email = email.trim().toLowerCase()
  25. const matched = email.match(EMAIL_REGEXP)
  26. if (matched == null || matched[0] == null) {
  27. return null
  28. }
  29. return matched[0]
  30. }
  31. module.exports = {
  32. getDomain,
  33. parseEmail,
  34. }