feat(classifier): has_valid_email_anywhere() helper for drop-logic
This commit is contained in:
@@ -215,4 +215,19 @@ final class Classifier
|
|||||||
}
|
}
|
||||||
return $hits;
|
return $hits;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function has_valid_email_anywhere(array $fields): bool
|
||||||
|
{
|
||||||
|
foreach ($fields as $v) {
|
||||||
|
$values = is_array($v) ? $v : [$v];
|
||||||
|
foreach ($values as $val) {
|
||||||
|
$val = trim((string)$val);
|
||||||
|
if ($val === '') continue;
|
||||||
|
if (preg_match('/[A-Za-z0-9._%+\-]+@[A-Za-z0-9.\-]+\.[A-Za-z]{2,}/', $val, $m)) {
|
||||||
|
if (is_email($m[0])) return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Cf7stg\Tests;
|
||||||
|
|
||||||
|
use Cf7stg\Classifier;
|
||||||
|
|
||||||
|
final class ClassifierDropTest extends Cf7stgTestCase
|
||||||
|
{
|
||||||
|
public function test_has_valid_email_anywhere_finds_gmail(): void
|
||||||
|
{
|
||||||
|
$fields = ['some-key' => 'pasha@gmail.com'];
|
||||||
|
self::assertTrue(Classifier::has_valid_email_anywhere($fields));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test_has_valid_email_anywhere_finds_in_array_value(): void
|
||||||
|
{
|
||||||
|
$fields = ['x' => ['noise', 'info@some-domain.com']];
|
||||||
|
self::assertTrue(Classifier::has_valid_email_anywhere($fields));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test_has_valid_email_anywhere_returns_false_for_invalid(): void
|
||||||
|
{
|
||||||
|
$fields = ['email' => 'not-an-email', 'x' => 'AB'];
|
||||||
|
self::assertFalse(Classifier::has_valid_email_anywhere($fields));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test_has_valid_email_anywhere_returns_false_when_empty(): void
|
||||||
|
{
|
||||||
|
self::assertFalse(Classifier::has_valid_email_anywhere([]));
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user