35 lines
1.4 KiB
TypeScript
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}`;
|
|
}
|