2***@qq.com
2***@qq.com
  • 发布:2021-03-03 13:45
  • 更新:2021-11-09 16:21
  • 阅读:1890

#插件讨论# 【 Forms 表单 - DCloud前端团队 】rules 和 自定义校验组合使用不生效

分类:uni-app

插件市场的例子
rules: {
hobby: {
rules: [{
required: true,
errorMessage: '请选择兴趣',
},{
validateFunction:function(rule,value,data,callback){
if (value.length < 2) {
callback('请至少勾选两个兴趣爱好')
}
return true
}
}]
}
}

我自己的例子,不校验
rules: [
{
validateFunction: function(rule, value, data, callback) {
console.log("value1: ",value);
console.log("data1: ",data);
if (data.hylb != 'HY13' && value == '') {
callback('请输入法人姓名')
}
return true
}
}, {
maxLength: 20,
errorMessage: '法人姓名长度不能超过20字符,其中汉字占3个字符!'
}]

自定义校验的方法好像只能和必填一起使用才能生效,否则不起作用,单独使用也无效,或者格式校验和自定义校验组合使用也不生效,这是表单插件的规则吗

2021-03-03 13:45 负责人:无 分享
已邀请:
1***@163.com

1***@163.com

idcard: {  
                        rules: [{  
                                required: true,  
                                errorMessage: '请输入身份证号码'  
                            },  
                            {  
                                validateFunction: function(rule, value, data, callback) {  
                                    let idcardReg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/  
                                    if (!idcardReg.test(value)) {  
                                        callback('身份证格式不正确,请重新填写')  
                                    }  
                                    return true  
                                }  
                            }  
                        ]  
                    },

我写的这个自定义校验身份证的 也是运行到微信开发者工具 就没有用
只有选择运行到浏览器 就会起作用
是小程序现在不支持这个自定义检验方法了吗

  • 青春不再

    亲测确实如此,作者无法解决

    2021-08-04 11:14

w***@163.com

w***@163.com

有遇见过只生效一次的情况吗

笑容不落

笑容不落

自己手动修改:
1:表单规则是异步, 所以需要在组件初始化增加判断 如果初始化 需要变更规则
文件位置: components->uni-forms->uni-forms.vue
修改位置: methods -> init

原始代码
if (!this.validator) {
this.validator = new Validator(formRules)
}
修改后代码
if (!this.validator) {
this.validator = new Validator(formRules)
} else {
this.validator.updateSchema(formRules)
}
2:修改Object.assign合并函数为ES6新方式合并
文件位置: components->uni-forms->validate.js
修改位置: Class RuleValidator->validateRule
原始代码:
Object.assign(rule, {
label: fieldValue.label || ["${fieldKey}"]
})
修改后代码:
rule = {...rule,...{
label: fieldValue.label || ["${fieldKey}"]
}}

另外 由于实例给的表单填写为异步填写 会直接触发自定义验证
个人在用例上直接改为了 异步填写为 默认显示 详细信息

该问题目前已经被锁定, 无法添加新回复