uniapp之表单校验

在 Uniapp 中,可以使用 uni-validate 插件来进行表单校验。uni-validate 是一个基于 async-validator 的表单校验插件,可以方便地对表单进行校验,并提供了一些内置的校验规则。

uni-validate 进行表单校验的示例

以下是一个使用 uni-validate 进行表单校验的示例:

  1. 安装 uni-validate 插件:

    bash 复制代码
    npm install uni-validate --save
  2. 在需要使用表单校验的页面中引入 uni-validate 插件:

    javascript 复制代码
    import uniValidate from '@/uni_modules/uni-validate/uni-validate.js';
  3. 创建一个校验规则对象:

    javascript 复制代码
    const rules = {
      username: [
        { required: true, message: '请输入用户名' },
        { min: 4, max: 10, message: '用户名长度为4-10个字符' }
      ],
      password: [
        { required: true, message: '请输入密码' },
        { min: 6, max: 20, message: '密码长度为6-20个字符' }
      ]
    };

    在这个示例中,我们定义了两个校验规则,一个是对用户名的校验规则,一个是对密码的校验规则。每个校验规则是一个数组,数组中的每个对象表示一个校验规则,包含了校验的条件和错误提示信息。

  4. 在表单提交的事件处理函数中进行表单校验:

    javascript 复制代码
    submitForm() {
      uniValidate(this.formData, rules).then(() => {
        // 表单校验通过,可以进行提交操作
        console.log('表单校验通过');
      }).catch(errors => {
        // 表单校验不通过,处理错误信息
        console.log('表单校验不通过', errors);
      });
    }

    在这个示例中,我们调用 uniValidate 函数来对表单数据进行校验。如果校验通过,会执行 then 方法中的回调函数;如果校验不通过,会执行 catch 方法中的回调函数,并将错误信息传递给回调函数。

通过以上步骤,我们就可以在 Uniapp 中使用 uni-validate 插件进行表单校验了。你可以根据自己的需求定义不同的校验规则,并在表单提交时进行校验,以确保表单数据的有效性。

校验规则说明

uni-validate 插件中,校验规则是一个数组,数组中的每个对象表示一个校验规则,包含了校验的条件和错误提示信息。下面是一些常用的校验规则及其说明:

  • required: 必填项,值不能为空。
  • pattern: 正则表达式校验,值必须符合指定的正则表达式。
  • min: 最小值校验,值必须大于或等于指定的最小值。
  • max: 最大值校验,值必须小于或等于指定的最大值。
  • minLength: 最小长度校验,值的长度必须大于或等于指定的最小长度。
  • maxLength: 最大长度校验,值的长度必须小于或等于指定的最大长度。
  • type: 类型校验,值必须是指定的类型,例如 "email" 表示邮箱类型,"url" 表示 URL 类型,"number" 表示数字类型等。
  • enum: 枚举校验,值必须是指定的枚举值之一。
  • validator: 自定义校验函数,可以通过自定义函数来进行更复杂的校验逻辑。

校验规则示例:

javascript 复制代码
const rules = {
  username: [
    { required: true, message: '请输入用户名' },
    { min: 4, max: 10, message: '用户名长度为4-10个字符' },
    { pattern: /^[a-zA-Z0-9_]+$/, message: '用户名只能包含字母、数字和下划线' }
  ],
  password: [
    { required: true, message: '请输入密码' },
    { min: 6, max: 20, message: '密码长度为6-20个字符' }
  ],
  email: [
    { required: true, message: '请输入邮箱' },
    { type: 'email', message: '邮箱格式不正确' }
  ],
  age: [
    { required: true, message: '请输入年龄' },
    { type: 'number', message: '年龄必须是数字' },
    { min: 18, message: '年龄必须大于等于18岁' }
  ],
  gender: [
    { required: true, message: '请选择性别' },
    { enum: ['male', 'female'], message: '性别只能为男或女' }
  ],
  customField: [
    { validator: (rule, value, callback) => {
        if (value !== 'custom') {
          callback(new Error('自定义字段必须为 "custom"'));
        } else {
          callback();
        }
      }, message: '自定义字段必须为 "custom"'
    }
  ]
};

在这个示例中,我们定义了一些常见的校验规则,例如对用户名、密码、邮箱、年龄、性别等进行校验。每个校验规则都是一个对象,包含了校验的条件和错误提示信息。

你可以根据自己的需求定义不同的校验规则,并在表单提交时进行校验,以确保表单数据的有效性。

rules 属性说明

uni-validate 插件中,rules 属性是一个对象,用于定义表单字段的校验规则。该对象的每个属性都是一个字段名,对应的值是一个校验规则数组,用于指定该字段的校验规则。

示例:

javascript 复制代码
const rules = {
  username: [
    { required: true, message: '请输入用户名' },
    { min: 4, max: 10, message: '用户名长度为4-10个字符' },
    { pattern: /^[a-zA-Z0-9_]+$/, message: '用户名只能包含字母、数字和下划线' }
  ],
  password: [
    { required: true, message: '请输入密码' },
    { min: 6, max: 20, message: '密码长度为6-20个字符' }
  ],
  email: [
    { required: true, message: '请输入邮箱' },
    { type: 'email', message: '邮箱格式不正确' }
  ]
};

在这个示例中,我们定义了一个 rules 对象,包含了三个字段的校验规则:usernamepasswordemail。每个字段的校验规则都是一个数组,数组中的每个对象表示一个校验规则。

你可以根据自己的需求定义不同的校验规则,并将其赋值给 rules 属性,以指定表单字段的校验规则。

format属性值说明

uni-validate 插件中,format 属性是一个对象,用于指定表单字段的格式化规则。该对象的每个属性都是一个字段名,对应的值是一个格式化函数,用于对表单字段的值进行格式化。

格式化函数接收一个参数,即要格式化的字段的值,然后返回格式化后的值。你可以在格式化函数中对字段的值进行任意的处理和转换,例如去除空格、转换大小写等。

示例:

javascript 复制代码
const format = {
  username: (value) => value.trim(),
  email: (value) => value.toLowerCase()
};

在这个示例中,我们定义了一个 format 对象,包含了两个字段的格式化规则:usernameemailusername 的格式化函数将字段的值去除首尾空格,email 的格式化函数将字段的值转换为小写。

你可以根据自己的需求定义不同的格式化规则,并将其赋值给 format 属性,以指定表单字段的格式化规则。在表单提交之前,会自动应用这些格式化规则对字段的值进行格式化。

validateFunction 自定义校验规则使用说明

uni-validate 插件中,你可以使用 validateFunction 属性来定义自定义的校验规则。validateFunction 是一个函数,接收三个参数:rulevaluecallback

  • rule 是当前校验规则的对象,包含了校验的条件和错误提示信息。
  • value 是要校验的字段的值。
  • callback 是一个回调函数,用于通知校验结果。如果校验通过,可以调用 callback();如果校验不通过,可以调用 callback(new Error('错误信息'))

示例:

javascript 复制代码
const rules = {
  customField: [
    { validator: (rule, value, callback) => {
        if (value !== 'custom') {
          callback(new Error('自定义字段必须为 "custom"'));
        } else {
          callback();
        }
      }, message: '自定义字段必须为 "custom"'
    }
  ]
};

在这个示例中,我们定义了一个自定义的校验规则,校验字段 customField 的值是否为 "custom"。校验函数接收 rulevaluecallback 三个参数,通过比较 value 的值,如果不等于 "custom",则调用 callback 并传递一个错误对象;如果等于 "custom",则调用 callback

你可以根据自己的需求定义不同的校验规则,并在校验函数中进行自定义的校验逻辑。

validateFunction 异步校验

如果你需要进行异步校验,可以在 validateFunction 中使用异步操作,例如发送网络请求或者进行数据库查询。在异步操作完成后,通过调用 callback() 或者 callback(new Error('错误信息')) 来通知校验结果。

示例:

javascript 复制代码
const rules = {
  asyncField: [
    { validator: (rule, value, callback) => {
        // 模拟异步校验
        setTimeout(() => {
          if (value !== 'async') {
            callback(new Error('异步字段必须为 "async"'));
          } else {
            callback();
          }
        }, 1000);
      }, message: '异步字段必须为 "async"'
    }
  ]
};

在这个示例中,我们定义了一个异步校验规则,校验字段 asyncField 的值是否为 "async"。在校验函数中,我们使用 setTimeout 模拟了一个异步操作,1秒后校验完成。如果值不等于 "async",则调用 callback 并传递一个错误对象;如果值等于 "async",则调用 callback

你可以根据自己的需求,在 validateFunction 中进行异步校验,并在异步操作完成后调用 callback 来通知校验结果。

动态表单校验

如果你需要根据不同的条件动态地进行表单校验,可以使用 validateFunction 属性中的函数来实现。在校验函数中,你可以根据不同的条件来决定是否要进行校验,并通过调用 callback() 或者 callback(new Error('错误信息')) 来通知校验结果。

示例:

javascript 复制代码
const rules = {
  dynamicField: [
    { validator: (rule, value, callback) => {
        if (value === 'dynamic') {
          // 根据条件进行校验
          if (/* 校验条件 */) {
            callback(new Error('动态字段校验不通过'));
          } else {
            callback();
          }
        } else {
          callback();
        }
      }, message: '动态字段校验不通过'
    }
  ]
};

在这个示例中,我们定义了一个动态校验规则,校验字段 dynamicField 的值是否为 "dynamic"。如果值等于 "dynamic",则根据条件进行校验。如果校验条件不满足,调用 callback 并传递一个错误对象;如果校验条件满足,调用 callback。如果值不等于 "dynamic",则直接调用 callback

你可以根据自己的需求,在 validateFunction 中根据不同的条件动态地进行表单校验,并在校验函数中调用 callback 来通知校验结果。

表单校验时机说明

表单校验的时机通常有以下几种情况:

  1. 实时校验:在用户输入表单字段时,实时对字段进行校验。这样可以及时给用户反馈,帮助用户发现并纠正错误。例如,在用户输入密码时,实时检查密码的强度。

  2. 提交前校验:在用户提交表单之前,对所有字段进行校验。这样可以确保用户输入的数据符合要求,避免提交无效或错误的数据。例如,在用户点击提交按钮时,对表单中的所有字段进行校验。

  3. 离焦校验:在用户离开(失去焦点)表单字段时,对该字段进行校验。这样可以在用户输入完毕后,给出及时的校验结果。例如,在用户输入邮箱地址后,离开邮箱输入框时,对邮箱地址进行校验。

根据实际需求,你可以选择适合的校验时机来进行表单校验。通常情况下,建议在实时校验的基础上,再进行提交前的校验,以确保数据的准确性和完整性。另外,离焦校验可以提供更好的用户体验,但需要注意不要过于频繁地触发校验操作,以避免影响性能。

相关推荐
尚梦2 小时前
uni-app 封装刘海状态栏(适用小程序, h5, 头条小程序)
前端·小程序·uni-app
尚学教辅学习资料8 小时前
基于SSM+uniapp的营养食谱系统+LW参考示例
java·uni-app·ssm·菜谱
Bessie2348 小时前
微信小程序eval无法使用的替代方案
微信小程序·小程序·uni-app
qq229511650217 小时前
小程序Android系统 校园二手物品交换平台APP
微信小程序·uni-app
qq22951165021 天前
微信小程序uniapp基于Android的流浪动物管理系统 70c3u
微信小程序·uni-app
qq22951165021 天前
微信小程序 uniapp+vue老年人身体监测系统 acyux
vue.js·微信小程序·uni-app
摇头的金丝猴2 天前
uniapp vue3 使用echarts-gl 绘画3d图表
前端·uni-app·echarts
小远yyds2 天前
跨平台使用高德地图服务
前端·javascript·vue.js·小程序·uni-app
qq22951165022 天前
uniapp+vue加油服务系统 微信小程序
vue.js·微信小程序·uni-app
重生之我是菜鸡程序员2 天前
uniapp 使用vue/pwa
javascript·vue.js·uni-app