156-收货地址-新增收货地址表单验证.md

async-validator

参考:

  1. async-validator 源码学习
  2. async-validator 之策略模式的应用
import Schema from "async-validator";

Page({
  data: {
    name: "", // 收货人
    phone: "", // 手机号码
    provinceName: "", // 省
    provinceCode: "", // 省编码
    cityName: "", // 市
    cityCode: "", // 市编码
    districtName: "", // 区
    districtCode: "", // 市编码
    subDistrictName: "", // 街道
    subDistrictCode: "", // 街道编码
    address: "", // 详细地址
    fullAddress: "", // 完整地址
    isDefault: false, // 是否设置为默认地址,0 不设置为默认地址,1 设置为默认地址
  },

  async saveAddrssForm() {
    const { provinceName, cityName, districtName, address, isDefault } = this.data;

    const params = {
      ...this.data,
      fullAddress: provinceName + cityName + districtName + address,
      isDefault: isDefault ? 1 : 0,
    };

    const { valid } = await this.validatorAddress(params);
    // valid == false, 验证失败
    if (!valid) return;
    console.log(params);
  },

  validatorAddress(params) {
    // 收货人:大小写字母、数字和中文字符
    const nameRegExp = "^[a-zA-Z\\d\\u4e00-\\u9fa5]+$";
    // 手机号:符合中国大陆手机号码的格式
    const phoneReg = "^1(?:3\\d|4[4-9]|5[0-35-9]|6[67]|7[0-8]|8\\d|9\\d)\\d{8}$";
    // 验证规则
    const rules = {
      name: [
        { required: true, message: "请输入收货人姓名" },
        { pattern: nameRegExp, message: "收货人姓名不合法" },
      ],
      phone: [
        { required: true, message: "请输入收货人手机号" },
        { pattern: phoneReg, message: "收货人手机号不合法" },
      ],
      provinceName: { required: true, message: "请选择收货人所在地区" },
      address: { required: true, message: "请输入详细地址" },
    };
    // 验证实例
    const validator = new Schema(rules);

    return new Promise((resolve) => {
      validator.validate(params, (errors) => {
        if (errors) {
          // 验证失败,提示第一个 error
          wx.toast({ title: errors[0].message });
          resolve({ valid: false });
        } else {
          resolve({ valid: true });
        }
      });
    });
  },
});
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 高频问题:OOM: 监控可以用didReceiveMemoryWarning 也可以类似flex ,通过mallo...
    咸鱼有只喵阅读 2,644评论 2 31
  • TS ts readonly[https://www.jianshu.com/writer#ts-readonly...
    汉卿阅读 144评论 0 0
  • >> 原文链接[https://nojsja.gitee.io/blogs/2021/05/04/48105820...
    nojsja阅读 1,239评论 0 1
  • innerHTML和document.write()区别 dom元素属性 document方法,写入页面的内容流会...
    14d986ef7574阅读 424评论 0 0
  • Bookmarks 书签栏 入职 华为新员工小百科(刷新时间202003023) - 人才供应知多少 - 3MS知...
    Btrace阅读 1,448评论 0 0