const LEADING_SMS_SIGNATURE = /^【[^】]+】/; const FORBIDDEN_SMS_SIGNATURE_CHARACTER = /[\p{White_Space}\p{Cc}\p{Default_Ignorable_Code_Point}]/u; export const SMS_SIGNATURE_CHARACTER_ERROR = '短信签名不能包含空格、换行或不可见字符'; export const SMS_SIGNATURE_FORMAT_ERROR = '必须填写完整中文黑括号签名,例如:【某某科技】'; export function formatSmsSignature(name?: string | null) { const innerName = (name ?? '').trim().replace(/^[【\[]+|[】\]]+$/g, '').trim(); return innerName ? `【${innerName}】` : ''; } export function isCompleteSmsSignature(name?: string | null) { return getSmsSignatureValidationError(name) === undefined; } export function hasForbiddenSmsSignatureCharacter(name?: string | null) { return FORBIDDEN_SMS_SIGNATURE_CHARACTER.test(name ?? ''); } export function getSmsSignatureValidationError(name?: string | null) { const value = name ?? ''; if (!value) { return SMS_SIGNATURE_FORMAT_ERROR; } if (hasForbiddenSmsSignatureCharacter(value)) { return SMS_SIGNATURE_CHARACTER_ERROR; } const match = value.match(/^【([^【】]+)】$/); return match ? undefined : SMS_SIGNATURE_FORMAT_ERROR; } export function replaceLeadingSmsSignature(content: string, signatureName?: string | null) { const body = content.replace(LEADING_SMS_SIGNATURE, ''); return `${formatSmsSignature(signatureName)}${body}`; }