2013-07-04 3 views
0

Я хочу создать функцию в php, чтобы предлагать имена пользователей, если введенное имя пользователя недоступно. Например, имя пользователя Введенный «лото», и она не доступна, то система должна предложить список имен пользователей, как этогоИмя пользователя в PHP

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

Правила для создания имени пользователя являются:

  • минимальная длина 6
  • имя пользователя может содержать максимум 3 символа (только дефисы, символы подчеркивания)
  • имя пользователя должно начинаться с буквенно-цифрового и заканчиваться буквенно-цифровым

Любая помощь и предложения будут очень заметными. Благодарю.

+0

@Deepu: Я попробовал str_shuffle с некоторым регулярным выражением, которое я получил с некоторых форумов, но я не могу добиться того, что мне нужно :(У вас есть какие-либо предложения ..? – LX7

+1

Как вы думаете, используя имена пользователей, такие как 'bing_o',' b_ing_o', 'bi_ng_o' поможет отличить их? – Voitcus

+0

Минимальная длина - '6', максимум -' 3'. Большой! – vikingmaster

ответ

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 
) 
+0

Это то, что мне действительно нужно. Спасибо, rr- :) – LX7

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; 
} 
0

После проверки через PHP и Mysql вы можете предложить пользователю путем перетасовки ввода пользователя:

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

Выход:

bfdcea 
    cdfbae 
    adefcb 
    beacfd 
Смежные вопросы