Apostrophe输入字段验证:为字符串字段添加特定文本拦截规则
嘿,这个需求在Apostrophe里实现起来非常直观,咱们只需要给目标输入字段添加自定义验证器就能搞定。我给你详细说下具体步骤和示例代码:
步骤1:在字段Schema中添加自定义验证
找到你要设置验证的那个字符串字段(比如在某个Piece或Page模块的schema配置里),给它加上validators数组,里面放我们的自定义验证逻辑。
举个具体的例子,假设你有一个名为userInput的字符串字段,要禁止用户输入精确的"hi"文本:
// 比如在你的某个模块(如apostrophe-pieces/blog-posts/index.js)的schema里 module.exports = { extend: 'apostrophe-pieces', name: 'blog-post', label: '博客文章', addFields: [ { name: 'userInput', label: '用户输入内容', type: 'string', required: true, // 可选,如果需要必填的话 validators: [ { name: 'forbiddenHi', // 验证函数:value是用户输入的值,callback用来返回验证结果 validate: (value, callback) => { // 检查输入是否是精确的"hi"(不区分大小写) if (value && value.toLowerCase() === 'hi') { // 验证失败,传入错误提示文本 return callback('抱歉,"hi"是不允许输入的内容哦'); } // 验证通过,直接调用callback即可 return callback(); } } ] } ] };
扩展:禁止包含"hi"的内容
如果你想要禁止**任何包含"hi"**的输入(比如"hi there"、"Hello Hi"都不行),可以把判断逻辑改成正则匹配:
validate: (value, callback) => { if (value && /hi/i.test(value)) { return callback('输入内容不能包含"hi"哦,请修改后重试'); } callback(); }
进阶:复用全局验证器
如果多个字段都需要这个验证规则,你可以把它注册成全局验证器,避免重复写代码。在项目根目录的app.js里配置:
module.exports = { modules: { // 其他模块配置... 'apostrophe-validators': { validators: { forbiddenHi: { validate: (value, callback) => { if (value && value.toLowerCase() === 'hi') { return callback('"hi"是禁止输入的内容'); } callback(); } } } } } };
之后在任何字段里,只需要这样引用就能复用这个验证规则:
{ name: 'userInput', label: '用户输入内容', type: 'string', validators: ['forbiddenHi'] }
这样设置后,当用户输入禁止的文本并提交表单时,Apostrophe会自动在字段下方显示你设置的错误提示,完全符合系统的默认交互逻辑~
内容的提问来源于stack exchange,提问作者Leeyung
相关产品推荐
相关产品推荐

