递归分析 Vue 项目组件依赖,从入口文件生成组件层级图,支持 Vue 2/3,输出组件名、文件路径和属性。适用于分析组件结构、排查依赖或了解项目架构。
vue 3处理特殊字符需“输入时过滤”和“失焦/提交时校验”双线并行:输入阶段用v-model.trim和@input+正则替换函数实时清理;校验阶段用rules中validator函数语义化提示,如含特殊字符则callback(new error('不能包含特殊字符'))。

Vue 3 中处理特殊字符,核心是“输入时过滤”和“失焦/提交时校验”双线并行,不是只靠 rules 一锤定音。关键在于区分场景:用户打字过程中要实时清理(比如自动删掉`!@#¥%`),而正式校验则需明确提示“不能含特殊字符”。
输入阶段:用 .trim + 自定义过滤函数自动清理
在 el-input 或 van-field 上,不单靠 v-model,而是配合修饰符和函数拦截:
- v-model.trim:自动去除首尾空格,是最基础但必加的一步
- @input + 替换函数:监听每次输入,用正则直接过滤掉非法字符
例如封装一个通用过滤函数:
utils/validate.tsexport const replaceCommonText = (e: Event | string): string => {
const val = typeof e === 'string' ? e : (e.target as HTMLInputElement).value
// 匹配常见特殊字符(不含空格、下划线、中英文标点)
return val.replace(/[`~!@#$%^&*()_+=[]{}|;':",./?\—·~《》]/g, '')
}
页面中使用:
<el-input v-model="form.title"> form.title = replaceCommonText(e)" /></el-input>
校验阶段:rules 中用 validator 做语义化提示
过滤只是“不让它存”,校验才是“告诉用户为什么不行”。用自定义校验器,在 blur 或 submit 时触发检查:
- 校验器接收 value,判断是否含特殊字符
- 若命中,调用 callback(new Error('xxx')) 报错
- 若通过,必须调用 callback()(无参)否则视为失败
示例规则:
const validateNoSpecialChar = (_rule: any, value: string, callback: Function) => {
const pattern = /[`~!@#$%^&*()_+=[]{}|;':",./?\—·~《》]/
if (pattern.test(value)) {
callback(new Error('不能包含特殊字符'))
} else {
callback()
}
}
const rules = {
title: [{ validator: validateNoSpecialChar, trigger: 'blur' }]
}
补充技巧:手机号、邮箱等字段的特殊字符预处理
像电话、邮箱这类字段,往往需要更精准控制。可结合正则做“格式兜底”:
- 手机号:
/^[1][3-9]d{9}$/—— 只允许纯数字且符合号段 - 邮箱:
/^[^s@]+@[^s@]+.[^s@]+$/—— 禁止空格、多余符号 - 输入时就用 .trim + replace(/s/g, '') 清掉所有空白符
这样即使用户粘贴了带空格或换行的号码,也能第一时间归一化。
注意事项:避免校验与过滤逻辑冲突
如果既在 input 时过滤,又在校验时检查“是否含特殊字符”,可能造成体验割裂(比如用户根本输不进去,却还看到错误提示)。建议:
- 过滤函数尽量“静默”——只删不报错
- 校验规则只用于用户主动提交或失焦后验证,且 message 要明确(如“请勿输入中文标点”)
- 对 checkbox、select 等非文本控件,无需特殊字符处理,重点放在 required 和 value 合法性上
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










