- 更新展品图片(鲁迅/毛泽东/孙中山/黄炎培/聂耳/张乐平故居) - 新增点击查看图标、报纸素材 - 优化视频组件、拼图组件、展品组件 - 更新陈云音频资源 - 新增输入验证文档和工具函数 - 组件布局和动画优化 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
4.0 KiB
4.0 KiB
信件输入校验功能说明
功能概述
为信件模板(LetterTemplate.tsx)的输入框添加了严格的内容校验,包括:
- 禁止英文字母 - 自动过滤并提示
- 禁止数字 - 自动过滤并提示
- 禁止所有标点符号和特殊符号(包括中文标点和英文标点)- 自动过滤并提示
- 敏感词过滤 - 检测并替换为星号,提交时校验
实现细节
1. 核心函数(src/lib/utils/sensitiveWords.ts)
filterInput(input: string): string
实时过滤输入内容,在用户输入时自动去除:
- 英文字母(a-z, A-Z)
- 数字(0-9)
- 所有标点符号(包括中文标点:,。!?;:等)
- 所有特殊符号(@#$%^&*等)
- 敏感词(替换为星号)
validateInput(input: string): { valid: boolean, message: string }
提交时完整校验,返回详细的错误信息:
- 空内容检测
- 英文字母检测
- 数字检测
- 特殊符号检测
- 敏感词检测
辅助函数
containsEnglish()- 检测是否包含英文containsNumber()- 检测是否包含数字containsSpecialChars()- 检测是否包含标点符号或特殊符号(包括中文标点)containsSensitiveWord()- 检测是否包含敏感词
2. 敏感词库
已扩展的敏感词库包括:
- 基础不文明用语
- 暴力相关词汇
- 违法违规内容
- 歧视性用语
可根据实际需求在 SENSITIVE_WORDS 数组中扩展。
3. 用户体验
实时过滤
用户输入时:
- 中文输入法支持:在输入拼音时不会被过滤,等用户选择中文后才进行过滤
- 英文字母、数字、所有标点符号和特殊符号 会被立即删除(用户无法输入)
- 敏感词 会被替换为星号(例如:"垃圾" → "**")
- 中文字符 可以正常输入
示例:
- 输入 "你好abc123世界" → 实时显示 "你好世界"
- 输入 "测试垃圾内容" → 实时显示 "测试**内容"
- 输入 "你好,世界!" → 实时显示 "你好世界"(标点被过滤)
- 使用中文输入法输入 "nihao" → 看到拼音 → 选择"你好" → 显示"你好" ✅
提交校验
当用户点击提交时:
- 如果内容包含被禁止的字符或敏感词,会显示相应提示
- 错误的输入框会清空并标红
- 用户需要重新填写
允许的内容
- ✅ 纯中文字符(汉字)
- ✅ 空格
- ❌ 英文字母(自动删除)
- ❌ 数字(自动删除)
- ❌ 所有标点符号(包括中文标点如,。!?;:等,自动删除)
- ❌ 所有特殊符号(@#$%^&*等,自动删除)
- ⚠️ 敏感词(替换为星号 * )
测试
所有校验函数都已通过测试:
- ✓ 英文字母检测和过滤
- ✓ 数字检测和过滤
- ✓ 特殊符号检测和过滤
- ✓ 敏感词检测和过滤
- ✓ 中文标点符号保留
- ✓ 完整的提交校验流程
使用示例
import { filterInput, validateInput } from '@/lib/utils/sensitiveWords'
// 实时过滤
const handleChange = (value: string) => {
const filtered = filterInput(value) // 自动过滤英文、数字、特殊符号、敏感词
setValue(filtered)
}
// 提交前校验
const handleSubmit = () => {
const result = validateInput(value)
if (!result.valid) {
showHint(result.message)
return
}
// 继续提交逻辑
}
配置选项
在 LetterFieldConfig 中可以通过 sanitize 字段控制是否启用校验:
const field: LetterFieldConfig = {
type: 'input',
sanitize: true, // 默认启用校验
// sanitize: false, // 禁用校验(不建议)
}
注意事项
- 落款姓名 也会进行相同的校验
- 中文输入法支持 - 使用
onCompositionStart和onCompositionEnd事件处理中文输入法,确保拼音输入过程不会被过滤 - 敏感词库 需要定期维护和更新
- 如果需要添加更多敏感词,请在
sensitiveWords.ts的SENSITIVE_WORDS数组中添加 - 所有标点符号(包括中文标点)都会被过滤