PHP中的用户名建议

时间:2013-07-04 06:43:54

标签: php regex preg-replace preg-match

如果输入的用户名不可用,我想在php中创建一个函数来建议用户名。 例如,输入的用户名为'bingo'并且不可用,那么系统应该建议一个像这样的用户名列表

bi_n_go
go-nbi
b-n_gio
b-ng-oi
...

创建用户名的规则是:

  • 最小长度6
  • 用户名最多可包含3个符号(仅限连字符,下划线)
  • 用户名必须以字母数字开头,以字母数字
  • 结尾

任何帮助和建议都会非常值得注意。谢谢。

3 个答案:

答案 0 :(得分:2)

尝试以下代码:

<?php
//mutates given user name, producing possibly incorrect username
function mutate($uname)
{
    $x = str_split($uname);

    //sort with custom function, that tries to produce only slightly
    //random user name (as opposed to completely shuffling)
    uksort($x, function($a, $b)
    {
        $chance = mt_rand(0, 3);
        if ($chance == 0)
        {
            return $b - $a;
        }
        return $a - $b;
    });

    //insert randomly dashes and underscores
    //(multiplication for getting more often 0 than 3)
    $chance = mt_rand(0, 3) * mt_rand(0, 3) / 3.;
    for ($i = 0; $i < $chance; $i ++)
    {
        $symbol = mt_rand() & 1 ? '-' : '_';
        $pos = mt_rand(0, count($x));
        array_splice($x, $pos, 0, $symbol);
    }
    return join('', $x);
}

//validates the output so you can check whether new user name is correct
function validate($uname)
{
    //does not start nor end with alphanumeric characters
    if (!preg_match('/^[a-zA-Z0-9].*[a-zA-Z0-9]$/', $uname))
    {
        return false;
    }
    //does contain more than 3 symbols
    $noSymbols = preg_replace('/[^a-zA-Z0-9]+/', '', $uname);
    if (strlen($uname) - strlen($noSymbols) > 3)
    {
        return false;
    }
    //shorter than 6 characters
    if (strlen($uname) < 6)
    {
        return false;
    }
    return true;
}

使用示例:

$uname = 'bingo';
$desired_num = 5;
$sug = [];
while (count($sug) < $desired_num)
{
    $mut = mutate($uname);
    if (!validate($mut))
    {
        continue;
    }
    if (!in_array($mut, $sug) and $mut != $uname)
    {
        $sug []= $mut;
    }
}
print_r($sug);

示例输出:

Array
(
    [0] => i-g-obn
    [1] => bi-gno
    [2] => bi_ngo
    [3] => i-bnog
    [4] => bign-o
)

答案 1 :(得分:1)

这是我创建的功能。 我希望它会对你有所帮助

echo stringGenerator("bingo");
function stringGenerator($str)
{
$middleStr = $str."-_";
$first = $str[rand(0, strlen($str)-1)];
for($i=0;$i<4;$i++)
{
    $middle .= $middleStr[rand(0, strlen($middleStr))];
}
$last = $str[rand(0, strlen($str)-1)];

return $first.$middle.$last;
}

答案 2 :(得分:0)

通过PHP和Mysql检查后,您可以通过改组用户的输入来建议用户:

$str = 'abcdef';
for($i=0;$i<=3;$i++){
$shuffled = str_shuffle($str).'</br>';
echo $shuffled;
}  

输出:

   bfdcea
   cdfbae
   adefcb
   beacfd