vue3中表单校验

文章讲述了在使用VantUI组件库时,如何对van-field进行首尾空格处理和特殊字符校验。通过正则表达式定义了字符和电话号码的格式,并在输入框失去焦点时执行校验方法。当表单提交时,会检查所有输入是否符合要求,若存在不符合规则的输入,则展示错误提示并阻止表单提交。此外,还涉及了登录和路由跳转时的置空处理,以避免错误信息的保留。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、用vant组件的van-field

        1.v-model的时候加上.trim去掉首尾空格

        2.@blur的时候校验当前输入框是否有特殊字符。

<van-field placeholder="请输入姓名" @blur="regInputInvalid" v-model.trim="temporary.basicInfo.name" label="姓名"/>

二、正则表达式

export const pattern = /[`!!@#$%^&*()_+=\[\]{};':"\\|,,.。<《>》\/??—·~]/;
export const patternTel = /^[1][3,4,5,6,7,8,9][0-9]{9}$/;

三、@blur的方法

//输入框失去焦点时判断输入是否非法,如果非法则存储
export function regInputInvalid(e:IBaseObject){
    //输入框的值
  let val=e.target.value
    //输入框的label
  let spanText=e.target.labels[0].innerText
  let arr1,arr=ss_getItem('isInputInvalid') || []
  let obj =<IBaseObject> getVeriInputObj(val,spanText)
    //存储的数据前判断之前是否有对此输入框进行校验存储过,有则改为最新的,没有就加进去
  if(arr.length>0){
    let flag=arr.some((item:IBaseObject)=>item.label===spanText)
    if(flag){
      arr.forEach((item:any)=>{
        if(item.label===spanText){
          for(let key in item){
            item[key]=obj[key]
          }
        }
      })
    }else{
      arr.push(obj)
    }
  }else{
    arr.push(obj)
  }
//筛选出校验未通过的Obj重新存储
  arr1=arr.filter((item:IBaseObject)=>{
    return !item.status
  })
  ss_setItem('isInputInvalid', arr1);
}
//获取输入框校验后的obj
export  function getVeriInputObj(val:string,spanText:string){
  let obj = {
    label: spanText,
    status: true,
    text: ''
  }
  if (val.length > 255) {
    showFailToast(`${spanText}字符不能大于255`);
    obj={
      label:spanText,
      status:false,
      text:`${spanText}字符不能大于255`
    }
  }else{
    if(spanText.indexOf('电话')>-1){
      if(!patternTel.test(val)){
        showFailToast(`${spanText}格式不对`);
        obj={
          label:spanText,
          status:false,
          text:`${spanText}格式不对`
        }
      }
    }else{
      if(pattern.test(val)){
        showFailToast(`${spanText}不能有特殊字符`);
        obj={
          label:spanText,
          status:false,
          text:`${spanText}不能有特殊字符`
        }
      }
    }
  }
  return obj
}

四、在每个表单提交的方法中先进行判断该页面的输入框是否都符合要求

1.提交方法

 async submit(){
    //校验不通过就返回
        if(!checkInputInvalid()){
          return;
        }
    ……………………………………
}

2.校验的方法

export const checkInputInvalid = () => {
  let arr=ss_getItem('isInputInvalid')
  if(arr.length>0){
    showFailToast(ss_getItem('isInputInvalid')[0].text)
    return false;
  }else{
    return true;
  }
}

五、置空处理

1.在每次登录的时候、路由跳转的时候设置(避免用户返回进入其它页面的表单操作时报错)


  ss_setItem('isInputInvalid',[])

### Vue3 和 UniApp 中的表单校验实现 #### 表单校验的意义 在开发过程中,表单校验是一种确保用户输入数据有效性和一致性的机制。通过合理的校验逻辑,可以减少服务器端的压力并提升用户体验[^1]。 #### 如何对表单进行校验? 为了实现在 Vue3 和 UniApp 中的表单校验功能,以下是具体的方法: ##### 准备工作 首先,需确认已安装 Vue 3 并设置好开发环境。如果尚未创建项目,则可以通过 Vue CLI 创建新的 Vue 3 项目[^2]: ```bash vue create my-vue-app cd my-vue-app ``` 对于 UniApp 开发者而言,还需熟悉其特有的组件库以及 `ref` 的使用方式[^3]。 ##### 实现步骤 以下是一个完整的示例代码,展示如何利用 Vue 3 及 UniApp 进行表单校验。 ###### HTML 结构 构建基础的表单结构,并绑定必要的事件处理函数。 ```html <template> <view class="form-container"> <u-form :model="formData" ref="uFormRef"> <!-- 用户名 --> <u-form-item label="用户名" prop="username"> <u-input v-model="formData.username"></u-input> </u-form-item> <!-- 密码 --> <u-form-item label="密码" prop="password"> <u-input type="password" v-model="formData.password"></u-input> </u-form-item> <!-- 提交按钮 --> <button @click="handleSubmit">提交</button> </u-form> </view> </template> ``` ###### JavaScript 部分 定义数据模型、校验规则及提交逻辑。 ```javascript <script setup> import { reactive, ref } from &#39;vue&#39;; // 定义表单数据对象 const formData = reactive({ username: &#39;&#39;, password: &#39;&#39; }); // 获取表单实例 const uFormRef = ref(null); // 校验规则配置 const rules = { username: [ { required: true, message: &#39;请输入用户名&#39;, trigger: [&#39;blur&#39;] }, { min: 3, max: 20, message: &#39;长度应在 3 到 20 字符之间&#39;, trigger: [&#39;blur&#39;] } ], password: [ { required: true, message: &#39;请输入密码&#39;, trigger: [&#39;change&#39;] }, { pattern: /^[a-zA-Z0-9]{6,}$/, message: &#39;密码应至少包含 6 位字母或数字&#39;, trigger: [&#39;change&#39;] } ] }; // 提交操作 function handleSubmit() { if (uFormRef.value) { uFormRef.value.validate((valid) => { if (!valid) { console.log(&#39;校验失败&#39;); return; } console.log(&#39;成功提交:&#39;, formData); }); } } </script> ``` ###### 初始化 Form 组件 在 UniApp 中,需要额外初始化 `uForm` 对象以便支持动态校验逻辑: ```javascript import { ref } from &#39;vue&#39;; const uForm1 = ref(); export default { data() { return {}; }, methods: {}, mounted() { this.$refs.uForm1.setRules(this.rules); // 动态加载校验规则 }, }; ``` #### 结果演示 运行上述代码后,在页面上填写表单项时会触发实时校验提示;当点击“提交”按钮时,只有满足所有条件的数据才会被发送至后台服务。 --- ### 总结 以上展示了基于 Vue 3 和 UniApp 构建响应式表单验证的具体流程与技巧。合理运用框架内置工具能够显著简化复杂业务场景下的交互设计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值