Files
koc-loop/lib/claimant-identifier.ts

36 lines
820 B
TypeScript
Raw Normal View History

export type ClaimantIdentifier = {
canonical: string;
display: string;
kind: "phone" | "wechat";
};
function stripLabel(value: string) {
return value
.replace(/^(?:微信号|微信|wechat|手机号|手机)\s*[:]?\s*/i, "")
.trim();
}
export function parseClaimantIdentifier(value: unknown): ClaimantIdentifier | null {
const input = stripLabel(String(value ?? "").trim());
if (!input) return null;
const phone = input.replace(/[\s-]/g, "").replace(/^\+?86/, "");
if (/^1[3-9]\d{9}$/.test(phone)) {
return {
canonical: `phone:${phone}`,
display: phone,
kind: "phone",
};
}
if (/^[A-Za-z][A-Za-z0-9_-]{5,31}$/.test(input)) {
return {
canonical: `wechat:${input.toLowerCase()}`,
display: input,
kind: "wechat",
};
}
return null;
}