Получите первую букву только имени и фамилии в php - PullRequest
0 голосов
/ 06 августа 2020

Я хочу отображать инициалы пользователя, используя только первую букву его имени и первую букву его фамилии. (Тестовый пользователь = TU)

Как я могу достичь этого результата, даже если пользователь вводит префикс или отчество? (Mr. Test Middlename User = TU).

Это код, который у меня есть (но он будет отображать более двух букв в зависимости от ввода пользователя):

public function initials() {
    $words = explode(" ", $this->name );
    $initials = null;
    foreach ($words as $w) {
        $initials .= $w[0];
    }
    return strtoupper($initials);
}

Ответы [ 2 ]

3 голосов
/ 06 августа 2020

Существует слишком много вариантов, но это должно захватывать имя и фамилию в строке, которая может иметь или не иметь префикс или суффикс, оканчивающийся точкой:

public function initials() {
    preg_match('/(?:\w+\. )?(\w+).*?(\w+)(?: \w+\.)?$/', $this->name, $result);
    return strtoupper($result[1][0].$result[2][0]);
}

$result[1] и $result[2] - первая и последняя группы захвата, а индекс [0] каждой из них - первый символ строки.

См. Пример

Это неплохо работает, однако имена с пробелом будут возвращать только вторую часть, например, De Jesus, вернут только Jesus. Вы можете добавить известные модификаторы для фамилий, например, de, von, van и c. но удачи в ловле их всех, тем более что он становится еще длиннее van de, van der, van den.

Чтобы расширить его для неанглийских префиксов и суффиксов sh, вы, вероятно, захотите определить их и вырезать, поскольку некоторые могут не заканчивается точкой.

$delete = ['array', 'of prefixes', 'and suffixes'];
$name = str_replace($delete, '', $this->name);

//or just beginning ^ and end $
$prefix = ['array', 'of prefixes'];
$suffix = ['array', 'of suffixes'];
$name = preg_replace("/^$prefix|$suffix$/", '', $this->name);
2 голосов
/ 06 августа 2020

Вы можете использовать reset() и end(), чтобы достичь этого

reset () перематывает внутренний указатель массива на первый элемент и возвращает значение первого элемента массива.

end () перемещает внутренний указатель массива на последний элемент и возвращает его значение.

public function initials() {

 //The strtoupper() function converts a string to uppercase.
    $name  = strtoupper($this->name); 
    //prefixes that needs to be removed from the name
    $remove = ['.', 'MRS', 'MISS', 'MS', 'MASTER', 'DR', 'MR'];
    $nameWithoutPrefix=str_replace($remove," ",$name);

$words = explode(" ", $nameWithoutPrefix);

//this will give you the first word of the $words array , which is the first name
 $firtsName = reset($words); 

//this will give you the last word of the $words array , which is the last name
 $lastName  = end($words);

 echo substr($firtsName,0,1); // this will echo the first letter of your first name
 echo substr($lastName ,0,1); // this will echo the first letter of your last name

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...