feat(classifier): has_valid_email_anywhere() helper for drop-logic
This commit is contained in:
@@ -215,4 +215,19 @@ final class Classifier
|
||||
}
|
||||
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