Эстетика это, конечно, да

можно и так сделать
soaemail.php
Код: Выделить всё
#!/usr/bin/env php
<?php
interface Filter {
function filter($data);
}
class CompositeFilter implements Filter
{
private $filters = [];
function addFiter(Filter $filter)
{
$this->filters[] = $filter;
}
function filter($data)
{
foreach ($this->filters as $filter) {
$data = $filter->filter($data);
}
return $data;
}
}
class SobakenFilter implements Filter
{
function filter($data)
{
return preg_replace('~(?<!\\\\)\\.~', '@', $data, 1);
}
}
class LastDotFilter implements Filter
{
function filter($data)
{
return preg_replace('~\\.$~', '', $data);
}
}
class StripSpacesFilter implements Filter
{
function filter($data)
{
return trim($data);
}
}
class StripSlashesFilter implements Filter
{
function filter($data)
{
return stripslashes($data);
}
}
class SoaEmailFilter extends CompositeFilter
{
function __construct()
{
$this->addFiter(new StripSpacesFilter());
$this->addFiter(new SobakenFilter());
$this->addFiter(new LastDotFilter());
$this->addFiter(new StripSlashesFilter());
}
}
$filter = new SoaEmailFilter();
foreach (file('php://stdin') as $line) {
echo $filter->filter($line), PHP_EOL;
}
Использование
Код: Выделить всё
% echo "this\.my\.email.my.lovely.personal.domain." | ./soaemail.php
this.my.email@my.lovely.personal.domain
Ещё можно каждый класс тестами покрыть, потом в композер и на гитхаб

красотищща
