如何让Sequelize的isAlpha校验支持特殊字符?
解决Sequelize中isAlpha校验不支持带重音特殊字符的问题
我之前也踩过这个坑!Sequelize默认的isAlpha校验其实是基于validator.js的实现,默认只匹配ASCII范围内的A-Za-z,所以像ã、é这类带重音的拉丁字符会被当成非法字符拦截掉。文档里确实没直接提这个细节,不过有两个简单的办法可以解决:
方法一:替换为支持Unicode字母的自定义正则
直接把isAlpha的args换成支持所有Unicode字母的正则表达式就行。\p{L}是Unicode属性转义,能匹配任意语言的字母(包括带重音的拉丁字符),加上u标志开启Unicode模式:
validate: { isAlpha: { args: /^[\p{L}]+$/u, msg: 'Must be only letters (including accented characters like ã, é)' } }
这样就能完美兼容你需要的特殊字符了。
方法二:使用自定义校验函数
如果需要更灵活的逻辑(比如同时允许某些符号),可以自己写一个校验函数:
validate: { onlyLettersWithAccents(value) { const validLettersRegex = /^[\p{L}]+$/u; if (!validLettersRegex.test(value)) { throw new Error('Must be only letters (including accented characters like ã, é)'); } } }
自定义函数的好处是可以根据需求随时调整校验规则,比如后续要加空格或者连字符,直接修改正则就行。
简单来说,默认的isAlpha是为ASCII场景设计的,遇到Unicode字符就需要我们手动扩展规则啦~
内容的提问来源于stack exchange,提问作者Marcelo Tardelli Magalhães
相关产品推荐
相关产品推荐

