Googlemail.com/gmail.com电子邮件规范化


Googlemail.com/gmail.com email normalization

我正在为我的新项目创建一个注册系统。我唯一的问题是@googlemail.com和@gmail.com被识别为不同的电子邮件地址。有人知道如何将它们从"@googlemail.com"更改为"@gmail.com"吗?

**Some pseudocode to help you**
    $change = '@gmail.com'
   $email = swap($change,'@googlemail.com', $email);

我的编程技能有限,所以不要判断伪代码。

使用str_replace():

$email = 'example@gmail.com';
$email = str_replace('@gmail.com','@googlemail.com',$email);

这将把example@gmail.com转换为example@googlemail.com

您可能需要使用stripos()查找字符串,然后使用str_ireplace()将gmail替换为googlemail。

if(stripos($email,'@gmail.com')!== false){
    $email = str_ireplace('gmail.com','googlemail.com',$email);
}

规范GMail地址并不像看上去那么容易。GMail具有以下更改地址的功能:

  • 不同的域名:gmail,googlemail
  • 圆点仅用于装饰:my.address@gmail.com和myaddress@gmail.com属于同一个邮箱
  • 可以使用"+"符号添加随机文本:my.addres+sometext@gmail.com

    /**
    * Normalize a GMail Address.
    *
    * Example:
    * my.name.1+ABC123@gmail.com => myname1@gmail.com
    * my.name@googlemail.com => myname@gmail.com
    *
    * @param string $email
    * @return string
    */
    public function normalize ($email)
    {
       foreach (array(
               'gmail.com',
               'googlemail.com'
           ) as $domain) {
           if (substr_count($email, $domain)) {
               $email = preg_replace('/'+.*(@)/i', '''1', $email);     //removes +ABC123
               $email = explode('@', $email);
               $email[0] = str_replace('.', '', $email[0]);            //remove dots
               $email = implode('@', $email);
               $email = str_replace('@' . $domain, '@gmail.com', $email); //set default domain
           }
    }
    return $email;
    }
    

使用substr()str_replace()

substr()可能是更安全的选择。还有很多其他方式。你要找的swap()应该是str_replace()(如果你只是把swap改成str_replace就可以了。