const MAX_NAME = 32; const MAX_BODY = 500; export class GuestCommentValidationError extends Error { constructor(message: string) { super(message); this.name = "GuestCommentValidationError"; } } export function normalizeGuestDisplayName(raw: string): string { const t = raw.trim(); if (!t) { throw new GuestCommentValidationError("请填写昵称"); } if (t.length > MAX_NAME) { throw new GuestCommentValidationError("昵称过长"); } return t; } /** 返回 trim 后正文;违规抛 GuestCommentValidationError(由 API 映射为 400) */ export function validateGuestCommentBody(raw: string): string { const t = raw.trim(); if (!t) { throw new GuestCommentValidationError("请填写内容"); } if (t.length > MAX_BODY) { throw new GuestCommentValidationError("内容过长"); } if (/https?:\/\//i.test(t) || /\bwww\./i.test(t)) { throw new GuestCommentValidationError("不能包含链接"); } if (/\[[^\]]*\]\([^)]*\)/.test(t)) { throw new GuestCommentValidationError("不能使用 Markdown 链接"); } return t; }