如何用Node.js的Joi实现字符串首尾含空格时的错误验证
在Node.js中使用Joi创建首尾无空格的字符串验证规则
要实现字符串首尾不能包含空格的验证,Joi提供了两种直观的实现方式:
方法一:用trim()配合strict()模式
Joi的trim()方法默认会自动去除字符串首尾空格并通过验证,但开启strict()模式后,会直接拒绝首尾带空格的输入(而非自动修正)。
示例代码
const Joi = require('joi'); // 定义验证规则 const nameSchema = Joi.string() .trim() .strict() .required() // 若字段为必填则保留,非必填可移除 .messages({ 'string.strict': '名称首尾不能包含空格', 'string.empty': '名称不能为空' }); // 测试验证逻辑 const validCase = 'test123'; const invalidCase1 = 'test '; // 结尾含空格 const invalidCase2 = ' test'; // 开头含空格 // 有效输入验证 const validResult = nameSchema.validate(validCase); console.log(validResult.error); // 输出:undefined(验证通过) // 无效输入验证 const errResult1 = nameSchema.validate(invalidCase1); console.log(errResult1.error?.details[0].message); // 输出:名称首尾不能包含空格 const errResult2 = nameSchema.validate(invalidCase2); console.log(errResult2.error?.details[0].message); // 输出:名称首尾不能包含空格
方法二:自定义正则表达式匹配
如果需要更灵活的规则,可通过pattern()指定正则,确保字符串首尾无空格:
示例代码
const Joi = require('joi'); // 正则说明: // ^[^\s] 匹配开头非空格字符 // .* 匹配任意中间字符(允许中间含空格) // [^\s]$ 匹配结尾非空格字符 // |^$ 允许空字符串(不需要则移除) const nameSchema = Joi.string() .pattern(/^[^\s].*[^\s]$|^$/) .required() .messages({ 'string.pattern.base': '名称首尾不能包含空格', 'string.empty': '名称不能为空' }); // 测试验证逻辑 const validCase = 'test 123'; // 中间含空格,验证通过 const invalidCase = ' test '; // 首尾均含空格,验证失败 const result = nameSchema.validate(invalidCase); console.log(result.error?.details[0].message); // 输出:名称首尾不能包含空格
内容的提问来源于stack exchange,提问作者manoj
相关产品推荐
相关产品推荐

