Files
lislgosms/src/utils/smsSignature.ts
T

35 lines
1.4 KiB
TypeScript

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}`;
}