使用RegEx将电子邮件与公司URL匹配

时间:2019-10-12 15:55:00

标签: javascript regex

我的联系非常简单,但出于业务需求,我们需要使用联系用户的电子邮件验证公司的网址

如果您的电子邮件地址为 user@examplecompany.com ,并且您的网址为 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

1 个答案:

答案 0 :(得分:3)

我尝试如下使用正则表达式实现它。

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上不起作用)提取主机名,然后提取域名以与电子邮件地址的域名进行比较。