如何从提供的电子邮件地址创建用户名 - PHP

时间:2009-06-05 15:23:51

标签: php email extract username

我的网站上有一个注册页面,用户必须只提供电子邮件地址和密码。

我希望能够使用所提供电子邮件的第一部分自动为该用户创建用户名;

用户提供 gordon @ yourdomain.com,我想创建用户名'gordon'

我不需要解释如何创建表单或向数据库提交数据,只需要从提供的电子邮件中提取数据的代码,如果需要,如果发生重复,则添加数字以结束。

希望这是有道理的,看起来像一个基本的功能,但无法在网上任何地方找到它的例子!

9 个答案:

答案 0 :(得分:13)

这不是一个好主意,只需使用他们的完整电子邮件地址即可。以下电子邮件地址可能是不同的人,但它们将在您的系统下变为相同。

samename@gmail.com
samename@yahoo.com

在最后添加一个数字会让用户记住系统中独有的内容,并在结束时引起很多混乱。

答案 1 :(得分:5)

同意,您正在将必要的唯一ID剥离为非唯一ID。除非您想添加某种处理来向用户名或其他内容添加数字。如果这是你真正想做的事情,那么应该在电子邮件地址之前设置$ username:

<?php
   $username = preg_replace('/([^@]*).*/', '$1', $email);
?>

答案 2 :(得分:2)

类似的东西:

$username = left($email, stripos($email, '@'));

应该这样做。您可能想要了解regular expressions这些任务。

然后你添加计数器:

function countOccurrences($name)
{
    $con = mysql_connect(___, ___, ___);
    if (!$con)
    {
        die('Could not connect: ' . mysql_error());
    }

    mysql_select_db(___, $con);

    $result = mysql_query("
        SELECT COUNT(*) AS countOccurrences
        FROM users
        WHERE username LIKE '" . mysql_real_escape_string($name, $con) . "%'
    ");

    $row = mysql_fetch_array($result);

    $number = $row['countOccurrences'];

    mysql_close($con);

    return $number;

}

然后:

$countUsers = countOccurrences($username);
if ($countUsers>0)    
{    
      $username = $username . $countUsers;
}

重要提示:考虑将整个电子邮件用作用户名:您不希望 gordon@flash.net 等同于 gordon@clash.com

注意:示例代码计算gordon,gordon1,gordon2但gordonbah,gordonq,gordonxxx

注意:这非常粗糙,不应被视为最佳PHP实践;它只是给出了一般的想法

答案 3 :(得分:2)

$username = gordon@example.com;

$username_arr = explode('@',$username);

$username = $username_arr[0];    

if( !is_taken( $username ) )
{
    //The name is not taken.
}
else
{
    //The name is taken, add numbers and do the search again.
}

function is_taken( $username )
{   
    $db_link = mysql_connect($host,$user,$pass) or die('Could not connect to database');

    $username = mysql_real_escape_string( $username );

    $sql = "SELECT * FROM `database`.`users` WHERE `username` = '$username'";

    $res = mysql_query( $sql , $db_link );

    return mysql_num_rows( $res ) == 1;

}

答案 4 :(得分:1)

<?php
 preg_match('/[^@]+)@/',$email,$matches);
 $username = $matches[1];
 check_availability($username);
?>

答案 5 :(得分:1)

从PHP 5.3.0开始,您还可以使用:

$email = 'test@stackoverflow.com';
$user = strstr($email, '@', true);

这将返回从&#39; @&#39;开始到第一次出现的所有字符串。在这种情况下是:

test

答案 6 :(得分:0)

应该符合您的需求:D

$username = substr($username, 0, strpos($username, '@'));

$username = mysql_real_escape_string($username);

$result = mysql_query('SELECT `username` FROM `users` WHERE `username` = \'' . $username . '%\';');

if (mysql_num_rows($result) > 0) {

   $i = 0;

   while ($name_arr = mysql_fetch_assoc($result)) {

      $name = $name_arr['username'];       

      $after = substr($name, strlen($username));

      if (ctype_digit($after)) {

         if (($after = (int) $after) > $i) {

            $i = $after;

         }

      }

   }

   if ($i > 0) {
      $username .= $i;
   }

}

答案 7 :(得分:0)

我使用这样的东西,

$cust_email = "test@gmail.com";
$parts = explode("@", $cust_email);
$cust_name = $parts[0];

如果用户未在个人资料中设置他/她的名字,我会用来设置默认用户名。

答案 8 :(得分:0)

您可以使用strstr功能查找字符串中的特定单词

   <?php

    $username = strstr("username@domain.com",'@',true); //get text before @    
    /*    
    echo strstr("username@domain.com","@"); // get text after @
    */
     check_availability($username);

    ?>