如果输入的用户名不可用,我想在php中创建一个函数来建议用户名。 例如,输入的用户名为'bingo'并且不可用,那么系统应该建议一个像这样的用户名列表
bi_n_go
go-nbi
b-n_gio
b-ng-oi
...
创建用户名的规则是:
任何帮助和建议都会非常值得注意。谢谢。
答案 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