82 lines
2.2 KiB
PHP
82 lines
2.2 KiB
PHP
<?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;
|
||
}
|
||
}
|