PHP Regex — удалить все символы, кроме первого, из последнего слова в строке

Я исследовал довольно долго, прежде чем писать, но я не мог придумать ответ.

Я пытаюсь удалить все символы, кроме первого, из строки. Строка будет именем. Имя может иметь имя и фамилию, а также отчество. Поэтому моя задача — разбить строку на слова и найти последний, удалить символы и добавить точку к первой букве. Более того, если оно присутствует в строке, второе имя не должно быть в результате.

Например: Chuck Ray Norris должен превратиться в Chuck N.

Я попробовал пару regex а также strpos но эта задача слишком сложна для меня и моих навыков.

-1

Решение

решение без регулярных выражений для шаблона «FirstName SecondName ThirdName … LastName»:

<?php
$str = "Chuck Ray Norris";
$spls = explode(" ", $str);
echo $spls[0] . " " . $spls[count($spls)-1][0] . ".";

Выход:

Chuck N.
1

Другие решения

Ты можешь использовать:

$s = 'Chuck Ray Norris';
$r = preg_replace('/^(\S+)\s+(?:\S+\s+)*(\S)\S*$/', '$1 $2.', $s);
//=> Chuck N.

$s = 'Chuck Norris';
$r = preg_replace('/^(\S+)\s+(?:\S+\s+)*(\S)\S*$/', '$1 $2.', $s);
//=> Chuck N.

$s = 'Chuck N.';
$r = preg_replace('/^(\S+)\s+(?:\S+\s+)*(\S)\S*$/', '$1 $2.', $s);
//=> Chuck N.

(?:\S+\s+)* используется для того, чтобы сделать одно или несколько отчеств необязательными. Это также заботится о случае, когда имя уже в желаемом формате (случай 3 выше).

2

я не знаю, сработает ли это, но попробуйте

<?php

$fullName = 'Chuck Ray Norris';
//$fullName = 'Chuck Ray';
//$fullName = 'Chuck';

$names = explode(' ', $fullName);
if((count($names) == 3) && isset($names[2])){
echo $names[0] . ' ' . $names[2][0] . '.';
}else{
if((count($names) == 2) && isset($names[1])){
echo $names[0] . ' ' . $names[1][0] . '.';
}else{
echo $names[0];
}
}

?>

попытайтесь изменить $ fullName на ‘Chuck Ray’ или ‘Chuck’, он все еще работает.

0

Вот как я бы это сделал:

$pos = strrpos($string, " ");

$pos = $pos === false ? 0 : $pos + 1;

$char = substr($string,$pos,1);
0

В качестве альтернативы, если это просто строка с требованиями:

Чак Рэй Норрис -> Чак Н

Затем с помощью взорваться (), зиЬзЬг () а также StrLen ():

<?php
$string = "Chuck Ray Norris";

// break string into words
$array = explode(" ", $string);

// keep the first word, keep the last word's first character
// ensure we have broken into vaid parts
$length = count($array);
if($length > 2) {
// ie. Chuck Norris
$first_word = $array[0];
$last_word = $array[$length-1];

// get first character,
$first_character = substr($last_word, 0, 1);
}
// else case is omitted

print "$first_word $first_character\n"; // outputs Chuck N

?>

строка substr (строка $ string, int $ start [, int $ length])

Пример: substr($last_word, 0, 1)

  • int $start: длина «Норриса» равна 6, поэтому первая позиция равна 0
  • int $length: нам нужен только 1 символ, поэтому позиция 0, «N»;

Надеюсь это поможет.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector