nastya97core
@nastya97core
Начинающий программист

Как из строки достать ФИО, г.р. и номер?

Здравствуйте. Есть вот такая строка:
Иванов Иван Иванович 01.01.1970 353

Подскажите пожалуйста, как можно отдельно достать данные в эти переменные?
$lastname
$firstname
$secondname
$birthdate
$number

Отчества может не быть, поэтому explode мне не совсем подходит... Так бы с радостью его использовала.

Вообще наверное можно было бы сделать explode, а потом просто проверять является ли 3 или 4 элемент массива датой, а number получать через end($array). Я просто не знаю, что будет быстрее: regExp или вот такой костыль.
  • Вопрос задан
  • 159 просмотров
Решения вопроса 3
@i1yas
Я бы в таком случае использовал regexp, но не из-за производительности. Возня с массивом будет достаточно громоздкой, никакого матчинга по сути не будет, только обработка опционального отчества.
С регуляркой можно проверять дополнительно дату и число:
$str = 'Иванов Иван Иванович 01.01.1970 353';
preg_match('/(\w*)\s(\w*)\s?(\w*)\s(\d\d\.\d\d.\d{4})\s(\d+)/u', $str, $match);
print_r($match);
Ответ написан
@IS-Builder
Анастасия, если нужно по переменным разложить, с учётом необязательного отчества, то можно так:
spoiler
//$str = 'Иванов Иван Иванович 01.01.1970 353';
$str = 'Иванов Иван 01.01.1970 353';

extract( splitLineBySpace($str) );
var_dump($lastname, $firstname, $secondname, $birthdate, $number);


function splitLineBySpace(string $str): array 
{
    $lastname = $firstname = $secondname = $birthdate = $number = '';
    $patt = '~(\S+)\h(\S+)(?:\h(\S+))?\h((?:\d\d\.){2}\d{4})\h(\d+)~';

    if (preg_match($patt, $str, $arr)) {
        if (count($arr) == 6) {
            [, $lastname, $firstname, $secondname, $birthdate, $number] = $arr;
        } else {
            [, $lastname, $firstname, $birthdate, $number] = $arr;
        }
    }
    return compact('lastname', 'firstname', 'secondname', 'birthdate', 'number');
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
The ZAL Москва
от 100 000 до 150 000 ₽
Технология Тюмень
от 50 000 до 130 000 ₽
08 авг. 2020, в 17:08
15000 руб./за проект
08 авг. 2020, в 16:12
10000 руб./за проект
08 авг. 2020, в 16:07
5000 руб./за проект