我的编程空间,编程开发者的网络收藏夹
学习永远不晚

js前端表单数据处理和校验怎么实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

js前端表单数据处理和校验怎么实现

这篇文章主要介绍了js前端表单数据处理和校验怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇js前端表单数据处理和校验怎么实现文章都会有所收获,下面我们一起来看看吧。

1.数据处理

当表单在视图所展示的数据并不是后端需要的数据,或者后端返回的数据不是前端所要展示的内容,这时就需要进行数据转换,下面介绍几种常见的场景

我假设有下面的一组form基础数据

 data(){    return {      form:{        name: '商品名称',        id: '订单编号',        nickName: '商品别名',        num: '商品数量',        price:'价格',        tag: '0' // 1 表示特价  0 表示无特价      },    } },

1.1 场景1 :过滤我不要的数据

场景:当前端form中的数据存在冗余的字段,也就是说后端并不需要这些字段,我们可以通过过滤把不必要的字段筛选掉

  const noRequired = ['tag', 'nickName']; //不需要的字段    const formData = Object.keys(this.form)      .filter(each => !noRequired.includes(each))      .reduce((acc, key) => (acc[key] = this.form[key], acc), {});

js前端表单数据处理和校验怎么实现

1.2 场景2:只提取我要的数据

场景:后端不需要表单数据那么多数据,只需要一部分时可以用

const formData= JSON.parse(      JSON.stringify(this.form,["nickName","price"]));

js前端表单数据处理和校验怎么实现

1.3 场景3 :覆盖数据

场景:当前表单有部分字段需要替换或覆盖新的数据时可用

Object.assign(this.form, {  tag: '商品1' }

js前端表单数据处理和校验怎么实现

1.4 场景4 :字段映射

当前表单字段需要映射为其他字段名称时可用,如下对应的name的key值换为Name

  • 单个字段映射情况

const formData = JSON.parse(      JSON.stringify(this.form).replace(        /name/g,        'Name'));

js前端表单数据处理和校验怎么实现

  • 多字段映射情况

const mapObj = {      name: "Name",      nickName: "NickName",      tag: "Tag"    };const formData = JSON.parse(      JSON.stringify(this.form).replace(        /name|nickName|tag/gi,        matched => mapObj[matched])   );

ps:这种方式有bug,你知道是什么吗?

js前端表单数据处理和校验怎么实现

1.5 场景5 : 数据映射

当字段存在0,1等状态数,需要转换成为相对应的表示时可用,如下对应的tag字段,0对应特价,1对应无特价,进行映射转换

const formData = JSON.parse(JSON.stringify(this.form,(key,value)=>{      if(key == 'tag'){        return ['特价','无特价'][value];      }      return value;}));

js前端表单数据处理和校验怎么实现

1.6 场景6: 数据合并

数据合并,将表单数据字段合并,注意的是,如果字段相同,会覆盖前面表单数据字段的数值

 const query = { tenaId: '订单编号', id:'查询ID'}   const formData = {     ...this.form,     query   }

js前端表单数据处理和校验怎么实现

2.表单校验

当表单数据填写完成,需要进一步做表单提交传送后端服务器,但是前端需要做数据的进一步确实是否符合规则,比如是否为必填项、是否为手机号码格式

2.1 简单版的单字段检查

data() {    return {       schema:{          phone: {            required:true          },       }    }; }, methods: {    // 判断输入的值     validate(schema, values) {       for(field in schema) {          if(schema[field].required) {            if(!values[field]) {              return false;            }          }        }       return true;    }, }console.log(this.validate(schema, {phone:'159195**34'}));

2.2 简单版的多字段检查

data() {    return {       phoneForm: {          phoneNumber: '',          verificationCode: '',          tips:''       },       schema:{          phoneNumber: [{required: true, error: '手机不能为空'}, {            regex: /^1[3|4|5|6|7|8][0-9]{9}$/,            error: '手机格式不对',          }],          verificationCode: [{required: true, error: '验证码不能为空'}],       }    }; }, methods: {    // 判断输入的值     validate(schema, values) {      const valArr = schema;      for (const field in schema) {        if (Object.prototype.hasOwnProperty.call(schema, field)) {          for (const key of schema[field]) {            if (key.required) {              if (!valArr[field]) {                valArr.tips = key.error;                return false;              }            } else if (key.regex) {              if (!new RegExp(key.regex).test(valArr[field])) {                valArr.tips = key.error;                return false;              }            }          }        }      }      return true;    }, }console.log(this.validate(this.schema, this.phoneForm);

2.3 Iview 组件库 form表单组件的校验实现

Iview 的 Form 组件模块主要由Form 和 FormItem组成

  • Form 主要是对form做一层封装

  • FormItem 是一个包裹,主要用来包装一些表单控件、提示消息、还有校验规则等内容。

源码链接

我们可以清晰看到,iview的 form 组件是通过async-validator工具库来作为表单验证的方法

js前端表单数据处理和校验怎么实现

  • async-validator的基本使用

import schema from 'async-validator';var descriptor = {  address: {    type: "object", required: true,    fields: {      street: {type: "string", required: true},      city: {type: "string", required: true},      zip: {type: "string", required: true, len: 8, message: "invalid zip"}    }  },  name: {type: "string", required: true}}var validator = new schema(descriptor);validator.validate({ address: {} }, (errors, fields) => {  // errors for address.street, address.city, address.zip});

js前端表单数据处理和校验怎么实现

而在iview的 form 组件中主要定义了validate函数中使用 field.validate就是调用async-validator的方法,用来管理form-item组件下的验证

// ViewUI/class="lazy" data-src/components/form/form.vuemethods:{    validate(callback) {        return new Promise(resolve => {            let valid = true;            let count = 0;            this.fields.forEach(field => {                field.validate('', errors => {                    if (errors) {                        valid = false;                    }                     // 检验已完成的校验的数量是否完全,则返回数据有效                    if (++count === this.fields.length) {                        // all finish                        resolve(valid);                        if (typeof callback === 'function') {                            callback(valid);                        }                    }                });            });     });    },    //针对单个的校验     validateField(prop, cb) {       const field = this.fields.filter(field => field.prop === prop)[0];         if (!field) {throw new Error('[iView warn]: must call validateField with valid prop string!'); }           field.validate('', cb);      }     //表单规则重置     resetFields() {        this.fields.forEach(field => {            field.resetField();        });   },},created () {    //通过FormItem定义的prop来收集需要校验的字段,    this.$on('on-form-item-add', (field) => {        if (field) this.fields.push(field);        return false;    });    // 移除不需要的字段    this.$on('on-form-item-remove', (field) => {        if (field.prop) this.fields.splice(this.fields.indexOf(field), 1);        return false;    }); }

Form.vue 中涉及到的 this.fields 里面的规则 是在其create生命周期时通过监听‘on-form-item-add’push进来的,‘on-form-item-add’事件是由form-item 组件 触发相对应的事件,并传入相对应的实例就可以创建数据的关联,以下是form-item的生命周期函数内容:

// ViewUI/class="lazy" data-src/components/form/form-item.vuemounted () {         // 如果定义了需要验证的字段          if (this.prop) {                // 向父亲Form组件添加field                this.dispatch('iForm', 'on-form-item-add', this);                Object.defineProperty(this, 'initialValue', {                    value: this.fieldValue                });                this.setRules();            } },  beforeDestroy () {    // 移除之前删除form中的数据字段    this.dispatch('iForm', 'on-form-item-remove', this);}  methods: {            setRules() {                //获取所有规则                let rules = this.getRules();                if (rules.length&&this.required) {                    return;                }else if (rules.length) {                    rules.every((rule) => {                        this.isRequired = rule.required;                    });                }else if (this.required){                    this.isRequired = this.required;                }                this.$off('on-form-blur', this.onFieldBlur);                this.$off('on-form-change', this.onFieldChange);                this.$on('on-form-blur', this.onFieldBlur);                this.$on('on-form-change', this.onFieldChange);            },             getRules () {             let formRules = this.form.rules;             const selfRules = this.rules;             formRules = formRules ? formRules[this.prop] : [];             return [].concat(selfRules || formRules || []);           },           validate(trigger, callback = function () {}) {                let rules = this.getFilteredRule(trigger);                if (!rules || rules.length === 0) {                    if (!this.required) {                        callback();                        return true;                    }else {                        rules = [{required: true}];                    }                }                // 设置AsyncValidator的参数                this.validateState = 'validating';                let descriptor = {};                descriptor[this.prop] = rules;                const validator = new AsyncValidator(descriptor);                let model = {};                model[this.prop] = this.fieldValue;                validator.validate(model, { firstFields: true }, errors => {                    this.validateState = !errors ? 'success' : 'error';                    this.validateMessage = errors ? errors[0].message : '';                    callback(this.validateMessage);                });                this.validateDisabled = false;          },}

2.4 常见校验规则

通过不同正则规则,来约束不同类型的表单数据是否符合要求

是否为手机号码: /^1[3|4|5|6|7|8][0-9]{9}$/

是否全为数字: /^[0-9]+$/

是否为邮箱:/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/

是否为身份证:/^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/

是否为Url:/[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/

是否为IP: /((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}/

关于“js前端表单数据处理和校验怎么实现”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“js前端表单数据处理和校验怎么实现”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

js前端表单数据处理和校验怎么实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

js前端表单数据处理和校验怎么实现

这篇文章主要介绍了js前端表单数据处理和校验怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇js前端表单数据处理和校验怎么实现文章都会有所收获,下面我们一起来看看吧。1.数据处理当表单在视图所展示的数据并
2023-07-02

利用PHP表单处理函数实现表单数据的验证和处理功能

利用PHP表单处理函数实现表单数据的验证和处理功能在网页开发中,表单是用户输入数据的主要交互方式之一。当用户提交表单时,我们需要对其输入的数据进行验证和处理,以确保数据的准确性和安全性。PHP表单处理函数提供了一种简单而有效的方式来实现这一
利用PHP表单处理函数实现表单数据的验证和处理功能
2023-11-20

PHP表单处理函数实现表单数据的验证和处理功能的方法总结

PHP表单处理函数实现表单数据的验证和处理功能的方法总结随着互联网的发展,表单是网站开发中不可或缺的一部分,用于与用户进行交互,搜集用户输入的数据。但是,用户输入的数据往往是不可预测的,为了保证网站的安全和数据的有效性,我们需要对表单数据进
PHP表单处理函数实现表单数据的验证和处理功能的方法总结
2023-11-20

javascript怎么实现进行客户端数据的校验

这篇文章主要讲解了“javascript怎么实现进行客户端数据的校验”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“javascript怎么实现进行客户端数据的校验”吧!脚本代码:<scrip
2023-06-03

PHP表单处理函数实现用户输入数据的验证和处理功能

PHP是一种广泛应用于动态网页开发的脚本语言,它的优势在于简单易学、灵活性强。在网页开发中,我们经常需要通过表单来收集用户的输入数据,并进行相应的处理和验证。为了提高开发效率和减少代码重复,我们可以使用PHP表单处理函数来实现用户输入数据的
PHP表单处理函数实现用户输入数据的验证和处理功能
2023-11-20

PHP表单验证函数实现用户输入数据的验证和处理功能

PHP表单验证函数实现用户输入数据的验证和处理功能在Web开发中,用户输入数据的验证和处理是一个非常重要的环节。通过对用户输入进行验证,可以保证数据的合法性和安全性,有效地防止恶意输入和攻击。同时,对用户输入进行适当的处理可以确保数据的准确
PHP表单验证函数实现用户输入数据的验证和处理功能
2023-11-20

JS前端怎么模拟Excel条件格式实现数据条效果

这篇文章主要介绍“JS前端怎么模拟Excel条件格式实现数据条效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JS前端怎么模拟Excel条件格式实现数据条效果”文章能帮助大家解决问题。需求背景最近
2023-07-05

Delphi中怎么实现即时通讯和实时数据处理

在Delphi中,可以使用库或组件来实现即时通讯和实时数据处理。以下是一些常用的库和组件:Indy(Internet Direct)组件库:Indy组件库是一个开源的网络通讯库,提供了各种网络通讯协议的支持,包括TCP、UDP、HTTP等。
Delphi中怎么实现即时通讯和实时数据处理
2024-03-13

Beam中怎么实现数据的批处理和流处理混合模式

在Beam中实现数据的批处理和流处理混合模式可以通过使用Beam的UnboundedSource和BoundedSource接口来实现。这两个接口分别用于定义无界数据流和有界数据集的数据源。在混合模式下,我们可以将无界数据流作为输入,然后
Beam中怎么实现数据的批处理和流处理混合模式
2024-03-15

Cassandra数据的分布式计算和并行处理怎么实现

Cassandra是一个分布式数据库系统,它支持并行处理和分布式计算。要实现Cassandra数据的分布式计算和并行处理,可以采用以下几种方法:数据分片:Cassandra通过数据分片将数据分布在多个节点上,每个节点负责存储和处理一部分数据
Cassandra数据的分布式计算和并行处理怎么实现
2024-05-11

Beam怎么实现数据的并行处理和分布式计算

Beam是一个用于实现数据处理管道的统一编程模型,它可以在不同的运行环境中进行数据的并行处理和分布式计算。下面是Beam实现数据的并行处理和分布式计算的一般步骤:编写Beam管道:首先,开发人员需要编写一个Beam管道,定义数据的输入源、数
Beam怎么实现数据的并行处理和分布式计算
2024-03-15

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录