시도 :
<?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
)
@Deepu : I 몇 가지 정규식과 함께 str_shuffle을 시도했는데 몇몇 포럼에서 가져 왔지만 필요한 것은 얻을 수 없다 : (.) 제안 사항이 있습니까? – LX7
'bing_o', 'b_ing_o' 등의 사용자 이름을 사용한다고 생각하십니까? 'bi_ng_o '는 그것들을 구별하는데 도움이 될 것입니까? – Voitcus
최소 길이 - '6', 최대 - '3'. 큰! – vikingmaster