In drie stappen

  1. Neem het deel na de @, in kleine letters en zonder spaties.
  2. Haal subdomeinen weg: mail.voorbeeld.nl wordt voorbeeld.nl.
  3. Sla adressen van mailproviders over. Achter gmail.com zit geen bedrijf.

Subdomeinen

Onder .nl staat het domein direct voor de extensie. De laatste twee delen zijn dus het domein: mail.voorbeeld.nl wordt voorbeeld.nl.

Andere extensies werken niet altijd zo. Bij .co.uk horen de laatste drie delen bij het domein. Werk je ook met buitenlandse adressen, gebruik dan de Public Suffix List in plaats van de laatste twee delen.

Mailproviders

Een adres bij een mailprovider of internetprovider zegt niets over het bedrijf. Veelvoorkomend in Nederland:

  • gmail.com, outlook.com, hotmail.com, live.nl, icloud.com, yahoo.com
  • ziggo.nl, kpnmail.nl, planet.nl, home.nl, xs4all.nl, hetnet.nl

Zo'n lijst is nooit af. Houd hem bij op één plek in je code, en vul hem aan als je aanmeldingen ziet die niet bij een bedrijf horen.

De functie

Geeft het domein terug, of null als er geen bedrijf achter het adres zit:

const providers = new Set([
  'gmail.com', 'outlook.com', 'hotmail.com', 'live.nl', 'icloud.com', 'yahoo.com',
  'ziggo.nl', 'kpnmail.nl', 'planet.nl', 'home.nl', 'xs4all.nl', 'hetnet.nl',
])

function companyDomain(email) {
  const at = email.lastIndexOf('@')
  if (at < 0) return null
  const host = email.slice(at + 1).trim().toLowerCase()
  if (!host.includes('.')) return null
  // onder .nl zijn de laatste twee delen het domein
  const domain = host.split('.').slice(-2).join('.')
  return providers.has(domain) ? null : domain
}

companyDomain('[email protected]') // 'voorbeeld.nl'
companyDomain('[email protected]') // null

Een null is hier een antwoord: er is geen bedrijfsdomein. Sla dan ook geen bedrijf op.

Daarna

Met het domein zoek je het bedrijf op: GET /v1/companies?domain=voorbeeld.nl. Hoe dat in een aanmelding past, staat bij Aanmeldingen verrijken.