ts
This commit is contained in:
@@ -78,6 +78,44 @@ class FbLeadHeaderMapper
|
|||||||
'email',
|
'email',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表头别名:标准化后表头 => headerMap里的key
|
||||||
|
*/
|
||||||
|
protected array $aliases = [
|
||||||
|
// ===== full_name =====
|
||||||
|
'name' => 'full_name',
|
||||||
|
'full_name' => 'full_name',
|
||||||
|
'full_name_(full_name)' => 'full_name',
|
||||||
|
'full_name_(full_name_)' => 'full_name',
|
||||||
|
'full_name_full_name' => 'full_name',
|
||||||
|
'full name' => 'full_name', // 万一没被替换成 _
|
||||||
|
'full_name(full_name)' => 'full_name',
|
||||||
|
'姓名' => 'full_name',
|
||||||
|
'姓名_full_name' => 'full_name',
|
||||||
|
'姓名(full_name)' => 'full_name',
|
||||||
|
|
||||||
|
// ===== phone =====
|
||||||
|
'phone' => 'phone',
|
||||||
|
'phone_number' => 'phone_number',
|
||||||
|
'phone number' => 'phone_number',
|
||||||
|
'telephone' => 'phone',
|
||||||
|
'tel' => 'phone',
|
||||||
|
'mobile' => 'phone',
|
||||||
|
'mobile_number' => 'phone',
|
||||||
|
'手机号' => 'phone',
|
||||||
|
'电话' => 'phone',
|
||||||
|
'电话号码' => 'phone',
|
||||||
|
'whatsapp' => 'phone', // 有的表单把 whatsapp 当电话
|
||||||
|
|
||||||
|
// ===== email =====
|
||||||
|
'email' => 'email',
|
||||||
|
'e-mail' => 'email',
|
||||||
|
'mail' => 'email',
|
||||||
|
'邮箱' => 'email',
|
||||||
|
'电子邮箱' => 'email',
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 返回所有支持的 Excel 表头(标准化后的 key)
|
* 返回所有支持的 Excel 表头(标准化后的 key)
|
||||||
*/
|
*/
|
||||||
@@ -92,6 +130,7 @@ class FbLeadHeaderMapper
|
|||||||
public function mapHeader(string $rawHeader): ?string
|
public function mapHeader(string $rawHeader): ?string
|
||||||
{
|
{
|
||||||
$key = $this->normalizeHeader($rawHeader);
|
$key = $this->normalizeHeader($rawHeader);
|
||||||
|
$key = $this->aliases[$key] ?? $key;
|
||||||
return $this->headerMap[$key] ?? null;
|
return $this->headerMap[$key] ?? null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -146,7 +185,9 @@ class FbLeadHeaderMapper
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$field = $this->headerMap[$key] ?? null;
|
// $field = $this->headerMap[$key] ?? null;
|
||||||
|
$aliasKey = $this->aliases[$key] ?? $key;
|
||||||
|
$field = $this->headerMap[$aliasKey] ?? null;
|
||||||
|
|
||||||
if ($field === null) {
|
if ($field === null) {
|
||||||
// 宽松:记录未知列(保留原始表头用于展示)
|
// 宽松:记录未知列(保留原始表头用于展示)
|
||||||
@@ -192,21 +233,31 @@ class FbLeadHeaderMapper
|
|||||||
{
|
{
|
||||||
// 去掉 UTF-8 BOM
|
// 去掉 UTF-8 BOM
|
||||||
$header = preg_replace('/^\xEF\xBB\xBF/', '', $header);
|
$header = preg_replace('/^\xEF\xBB\xBF/', '', $header);
|
||||||
|
|
||||||
// 去掉前后空白
|
|
||||||
$header = trim($header);
|
$header = trim($header);
|
||||||
|
if ($header === '') return '';
|
||||||
|
|
||||||
if ($header === '') {
|
// 统一全角括号
|
||||||
return '';
|
$header = str_replace(['(',')'], ['(',')'], $header);
|
||||||
}
|
|
||||||
|
|
||||||
// 可选增强(默认不开启,避免影响中文):
|
// 小写化(对英文有效,中文不受影响)
|
||||||
// $header = mb_strtolower($header);
|
$header = mb_strtolower($header);
|
||||||
// $header = preg_replace('/\s+/', '_', $header);
|
|
||||||
|
// 把括号内容保留下来,但用下划线连接: "姓名(Full name)" -> "姓名_full_name"
|
||||||
|
$header = preg_replace('/\((.*?)\)/', '_$1', $header);
|
||||||
|
|
||||||
|
// 空白转下划线
|
||||||
|
$header = preg_replace('/\s+/', '_', $header);
|
||||||
|
|
||||||
|
// 连续下划线压缩
|
||||||
|
$header = preg_replace('/_+/', '_', $header);
|
||||||
|
|
||||||
|
// 去掉首尾下划线
|
||||||
|
$header = trim($header, '_');
|
||||||
|
|
||||||
// ✅ 去掉末尾连续的 "_" / "?"
|
// ✅ 去掉末尾连续的 "_" / "?"
|
||||||
$header = rtrim($header, "_?");
|
$header = rtrim($header, "_?");
|
||||||
|
|
||||||
return $header;
|
return $header;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user