FeipAPI/Mirzaev/Feip/Params/Baz.php

82 lines
2.2 KiB
PHP
Raw Permalink Normal View History

2020-10-02 21:11:19 +07:00
<?php
declare(strict_types=1);
namespace Mirzaev\Feip\Params;
use Mirzaev\Feip\Error;
/**
* Параметр baz
*
* @property string $baz baz
*
* @package Mirzaev\Feip\Params
* @author Арсен Мирзаев <red@hood.su>
*/
trait Baz
{
/**
* baz: параметр
*
* @var string
*/
protected string $baz = '';
/**
* baz: фильтр
*
* @param string|int|float $target Значение для фильтрации
*
* @return string|null
*/
public static function baz($target): ?string
{
// Очистка
if ($sanitized = filter_var($target, FILTER_CALLBACK, array('options' => [self::class, 'phoneNumberRus']))) {
// Если очищение вернуло результат
// Проверка
if ($sanitized !== $target || !preg_match('/^7[0-9]{10}$/', $sanitized)) {
// Если очищенное значение не совпадает с отправленным
// или если не совпадает с паттерном "7**********" (российский номер)
new Error(200, __FUNCTION__);
}
// В задании было указано: для номеров тип string
return (string) $sanitized;
} else {
new Error(200, __FUNCTION__);
}
return null;
}
/**
* baz: очистка
*
* @param string|int|float $target Значение для очистки
*
* @return string|null
*/
public static function phoneNumberRus($target): string
{
// Поиск цифр
preg_match_all('/[0-9]*/', $target, $match);
// Инициализация
$result = '';
// Конкатанация найденных цифр
foreach ($match[0] as $number) {
$result .= $number;
}
// Конвертация под Российский номер
$result[0] = 7;
// В задании было сказано: для номеров тип string
return (string) $result;
}
}