Reputation: 123
I want to grab the first name in lowercase then concatenate the first two characters after the space and finally concatenate that with a random number from 0 to 100.
So if my name is "Mike Test"
I want the output to be: mikete3
function random_username($string) {
$pattern = " ";
$firstPart = strstr(strtolower($string), $pattern, true);
$secondPart = substr(strstr(strtolower($string), $pattern, false), 0, 3);
$nrRand = rand(0, 100);
$username = $firstPart.$secondPart.$nrRand;
return $username;
}
echo random_username("Mike Test");
My function outputs "mike te84" and I don't know how to remove that space.
Upvotes: 2
Views: 17020
Reputation: 9
You can use this code to generate a random username based on the user's full name.
<?php
function generateUsername($fullName)
{
$removedMultispace = preg_replace('/\s+/', ' ', $fullName);
$sanitized = preg_replace('/[^A-Za-z0-9\ ]/', '', $removedMultispace);
$lowercased = strtolower($sanitized);
$splitted = explode(" ", $lowercased);
if (count($splitted) == 1) {
$username = substr($splitted[0], 0, rand(3, 6)) . rand(111111, 999999);
} else {
$username = $splitted[0] . substr($splitted[1], 0, rand(0, 4)) . rand(11111, 99999);
}
return $username;
}
$username = generateUsername("Elon Musk");
echo $username;
?>
Output:
elonmusk74388
elon41960
elonmus77699
elonmus26248
elonmusk93154
elonmusk83467
elonm28690
elonmu79305
elonmu18227
elonmu28329
elon15113
elonmus38293
elonmusk77995
elonmusk77790
elonmu13349
elonmu73136
elonmus27741
elonmu72284
elon47465
elon85983
elonmus49720
Upvotes: -1
Reputation: 47894
strtolower()
.Code: (Demo) (leveraging Spread Operator in Array Expression from PHP7.4)
function random_username($string) {
return vsprintf('%s%s%d', [...sscanf(strtolower($string), '%s %2s'), random_int(0, 100)]);
}
echo random_username("Mike Test"); // mikete25
An alternative syntax can declare variables to make it more intuitive/expressive. (Demo)
function random_username($string) {
sscanf(strtolower($string), '%s %2s', $first, $second);
return sprintf('%s%s%d', $first, $second, random_int(0, 100));
}
Or apply the same behavior with preg_replace()
where \S
means any non-whitespace character: (Demo)
function random_username($string) {
return preg_replace('/(\S+) (\S{2}).*/', '$1$2', strtolower($string)) . random_int(0, 100);
}
Upvotes: 1
Reputation: 821
Regex solution
function random_username($string) {
$nrRand = rand(0, 100);
$string = strtolower($string);
return preg_replace('/^(.+)\s(.{2}).+$/', '$1$2', $string, 1) . $nrRand;
}
echo random_username("Mike Test");
Upvotes: 0
Reputation: 5532
Simpler way
$username = substr(str_replace(' ','',strtolower($name)), 0, 5).rand(1,3);
Upvotes: -1
Reputation: 2343
Try:
function random_username($string) {
$name = split("[ .-]", $string);
$firstname = $name[0];
$lastname = $name[1];
$firstname = strtolower($firstname);
$lastname = strtolower(substr($lastname, 0, 2));
$nrRand = rand(0, 100);
return $firstname . $lastname . $nrRand;
}
echo random_username("Mike Test");
Upvotes: -1
Reputation: 486
Try this, always use trim to remove extra space.
function random_username($string) {
$pattern = " ";
$firstPart = strstr(strtolower($string), $pattern, true);
$secondPart = substr(strstr(strtolower($string), $pattern, false), 0,3);
$nrRand = rand(0, 100);
$username = trim($firstPart).trim($secondPart).trim($nrRand);
return $username;
}
echo random_username("Mike Test");
Upvotes: 8