У меня очень простой контакт, но для бизнес-требований нам нужно подтвердить URL-адрес компании с адресом электронной почты контактирующего пользователя.

Если ваш адрес электронной почты user@examplecompany.com , а ваш URL-адрес http://examplecompany.com , форма будет заполнена.

Я пытаюсь сделать это с помощью регулярного выражения, но я не могу, хоть убей, понять, что я делаю не так.

Вот мой код:

    validateEmail = (email, url) => {
       let rootUrl = url.match(/^(?:https?:\/\/)?(?:[^@\/\n]+@)?(?:www\.)?([^:\/?\n]+)/)[1];
       let emailDomain = email.match(/@(.*)/)[1];
       return rootUrl === emailDomain;
    }

Мой emailDomain возвращается undefined.

0
oschvr 12 Окт 2019 в 18:55

1 ответ

Лучший ответ

Я попытался реализовать это с помощью регулярного выражения следующим образом.

const validateEmail = (email, url) => {
  let regex = /(https?:\/\/)?(\w*\.)?(\w*\.\w*)/
  let rootUrl = url.match(regex)[3];
  let emailDomain = email.match(/@(.*)/)[1];
  return rootUrl === emailDomain;
}

// Testing
let emails = ["user@examplecompany.com", "user@othercompany.com"]

let urls = ["http://examplecompany.com", "https://examplecompany.com", "http://www.examplecompany.com", "https://www.examplecompany.com","examplecompany.com", "www.examplecompany.com"]

urls.forEach((url) => {
  emails.forEach((email) => {
    let valid = validateEmail(email, url)
    console.log(`email = ${email}, url = ${url}, isValid: ${valid}`)
  })
})

Вы также можете попробовать использовать URL api (из конечно, это не работает в IE), чтобы извлечь имя хоста, а затем извлечь имя домена для сравнения с именем домена адреса электронной почты.

3
sam 12 Окт 2019 в 21:18