当前位置:

首页 > 编程开发 > vue.js常用的自定义校验方式

vue.js常用的自定义校验方式

Vue.js项目中建议将自定义校验规则统一整理到JS文件,按需引入,便于维护,提升代码复用性和可维护性。常用校验包括用户名、URL、邮箱、手机号、身份证、价格、正整数、数字位数、金额大写、密码强度、IP地址等格式验证。

本文目录

    vue.js常用自定义校验

    在实际项目中,建议将各类校验规则统一整理到一个JS文件中,然后按需引入,这样既方便维护,也能避免重复造轮子。

    const resultMsg = {
      result: false,
      message: ''
    }
    
    export function isvalidUsername(str) {
      const valid_map = ['admin', 'editor']
      return valid_map.indexOf(str.trim()) >= 0
    }
    
    /* 合法uri*/
    export function validateURL(textval) {
      const urlregex = /^(https?|ftp)://([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+.)*[a-zA-Z0-9-]+.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(/($|[a-zA-Z0-9.,?'\+&%$#=~_-]+))*$/
      return urlregex.test(textval)
    }
    
    /* 小写字母*/
    export function validateLowerCase(str) {
      const reg = /^[a-z]+$/
      return reg.test(str)
    }
    
    /* 大写字母*/
    export function validateUpperCase(str) {
      const reg = /^[A-Z]+$/
      return reg.test(str)
    }
    
    /* 大小写字母*/
    export function validatAlphabets(str) {
      const reg = /^[A-Za-z]+$/
      return reg.test(str)
    }
    
    /*判断输入的EMAIL格式是否正确 */
    export function validateIsEmail(str) {
      if (str.length != 0) {
        const reg = /[\w!#$%&'*+/=?^_`{|}~-]+(?:.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?.)+[\w](?:[\w-]*[\w])?/;
        return reg.test(str);
      }
    }
    
    /*判断输入的手机号格式是否正确 */
    export function validateIsPhone(str) {
      if (str.length != 0) {
        const reg = /^1[0-9]{10}$/;
        return reg.test(str);
      }
    }
    
    /*验证价格*/
    export function validatePrice(str) {
      const reg = /(^[1-9]([0-9]{1,4})?(.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9].[0-9]([0-9])?$)/;
      return reg.test(str)
    }
    
    /*验证正整数*/
    export function validateNum(value) {
      const reg = /^[1-9][0-9]*$/;
      resultMsg.result = reg.test(value);
      resultMsg.message = '请输入正整数';
      return resultMsg;
    }
    
    /*验证4位正整数*/
    export function validateNum4(value) {
      const reg = /^0|[1-9][0-9]{0,3}$/;
      resultMsg.result = reg.test(value);
      resultMsg.message = '请输入数字值且不大于4位';
      return resultMsg;
    }
    
    /*验证5位正整数*/
    export function validateNum5(value) {
      const reg = /^0|[1-9][0-9]{0,4}$/;
      resultMsg.result = reg.test(value);
      resultMsg.message = '请输入数字值且不大于5位';
      return resultMsg;
    }
    
    /*验证1-7位数字加4位小数*/
    export function validateNum7(value) {
      const reg = /^(0|[1-9][0-9]{0,6})(.[0-9]{1,4})?$/;
      resultMsg.result = reg.test(value);
      resultMsg.message = '请输入数字值且不大于7位或最大四位小数';
      return resultMsg;
    }
    
    /*验证1-16位数字加2位小数*/
    export function validateNum16(value) {
      const reg = /^(0|[1-9][0-9]{0,13})(.[0-9]{1,2})?$/;
      resultMsg.result = reg.test(value);
      resultMsg.message = '请输入数字值且不大于14位或最大两位小数';
      return resultMsg;
    }
    
    /*验证1-18位数字加6位小数*/
    export function validateNum18(value) {
      const reg = /^(0|[1-9][0-9]{0,17})(.[0-9]{1,6})?$/;
      resultMsg.result = reg.test(value);
      resultMsg.message = '请输入数字值且不大于18位或最大六位小数';
      return resultMsg;
    }
    
    /*验证9位正整数*/
    export function validateNum9(value) {
      const reg = /^0|[1-9][0-9]{0,9}$/;
      resultMsg.result = reg.test(value);
      resultMsg.message = '请输入数字值且不大于10位';
      return resultMsg;
    }
    
    /*验证12位正整数*/
    export function validateNum12_6(value) {
      const reg = /^(0|[1-9][0-9]{0,11})(.[0-9]{1,6})?$/;
      resultMsg.result = reg.test(value);
      resultMsg.message = '请输入数字值且不大于12位或最大六位小数';
      return resultMsg;
    }
    
    //校验输入非中文  true 是中文
    export function noChinese(value) {
      const reg = /[\u4e00-\u9fa5]/;
      resultMsg.result = reg.test(value);
      resultMsg.message = '基金代码不能输入汉字!';
      return resultMsg;
    }
    
    //校验输入是否是数组或点
    export function inputNumberOrSpot(value) {
      const reg = /^\d+(?=.{0,1}\d+$|$)/ ;
      resultMsg.result = reg.test(value);
      resultMsg.message = '请输入正确的销售服务费费率!';
      return resultMsg;
    }
    
    //校验输入是否是数字(包括正负、小数点)
    export function inputOrNumber(value) {
      const reg = /[-+]*[0-9][.][0-9]+|[-+]*[1-9][0-9]*|^[0]$/ ;
      resultMsg.result = reg.test(value);
      resultMsg.message = '请输入数字';
      return resultMsg;
    }
    
    //校验输入字符是否大于6位(包含数字字母)
    export function validateByte6_18(value) {
      const reg = /^.{6,18}$/;
      resultMsg.result = reg.test(value);
      resultMsg.message = '请输入至少输入6位及以上任意字符';
      return resultMsg;
    }
    
    //校验输入字符是否是路径格式
    export function validateUrl(value) {
      const reg = /^[a-zA-Z]:(((\(?! )[^/:*?<>""|\\]+)+\\?)|(\)?)\s*$/;
      resultMsg.result = reg.test(value);
      resultMsg.message = '请输入正确的文件路径';
      return resultMsg;
    }
    
    //大写金额
    export function digitUppercase(num) {
      var tmpNum = num;
      var AA = new Array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖");
      var BB = new Array("", "拾", "佰", "仟", "万", "亿", "元", "");
      var CC = new Array("角", "分", "厘");
      var a = ("" + num).replace(/(^0*)/g, "").split("."), k = 0, re = "";
      for (var i = a[0].length - 1; i >= 0; i--) {
        switch (k) {
          case 0:
            re = BB[7] + re;
            break;
          case 4:
            if (!new RegExp("0{4}\d{" + (a[0].length - i - 1) + "}$").test(a[0]))
              re = BB[4] + re;
            break;
          case 8:
            re = BB[5] + re;
            BB[7] = BB[5];
            k = 0;
            break;
        }
        if (k % 4 == 2 && a[0].charAt(i + 2) != 0 && a[0].charAt(i + 1) == 0)
          re = AA[0] + re;
        if (a[0].charAt(i) != 0)
          re = AA[a[0].charAt(i)] + BB[k % 4] + re;
        k++;
      }
      if (a.length > 1) {// 加上小数部分(如果有小数部分)
        if (a[0].length == 0) {
          re += "";
        } else {
          re += BB[6];
        }
        for (var i = 0; i < a[1].length; i++) {
          re += AA[a[1].charAt(i)] + CC[i];
          if (i == 2)
            break;
        }
      }
      if (tmpNum.toString().indexOf(".") == -1) {
        re += "元整";
      }
      // 处理输入字符0的情况
      if (a == '') {
        re = "零" + re;
      }
      return re;
    }
    
    /* 是否邮箱*/
    export function validateEMail(rule, value,callback) {
      const reg =/^([a-zA-Z0-9]+[-_.]?)+@[a-zA-Z0-9]+.[a-z]+$/;
      if(value==''||value==undefined||value==null){
        callback();
      }else{
        if (!reg.test(value)){
          callback(new Error('请输入正确的邮箱地址'));
        } else {
          callback();
        }
      }
    }
    
    /* 是否身份证号码*/
    export function validateIdNo(rule, value,callback) {
      const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
      if(value==''||value==undefined||value==null){
        callback();
      }else {
        if ((!reg.test(value)) && value != '') {
          callback(new Error('请输入正确的身份证号码'));
        } else {
          callback();
        }
      }
    }
    
    /* 是否手机号码或者固话*/
    export function validatePhoneTwo(rule, value, callback) {
      const reg = /^((0\d{2,3}-\d{7,8})|(1[34578]\d{9}))$/;;
      if (value == '' || value == undefined || value == null) {
        callback();
      } else {
        if ((!reg.test(value)) && value != '') {
          callback(new Error('请输入正确的电话号码或者固话号码'));
        } else {
          callback();
        }
      }
    }
    
    /* 是否固话*/
    export function validateTelphone(rule, value,callback) {
      const reg =/0\d{2}-\d{7,8}/;
      if(value==''||value==undefined||value==null){
        callback();
      }else {
        if ((!reg.test(value)) && value != '') {
          callback(new Error('请输入正确的固话(格式:区号+号码,如010-1234567)'));
        } else {
          callback();
        }
      }
    }
    

    另外,如果要校验分数(0-100,最多两位小数),可以这样做。先在规则中配置验证器:

    answerNum: [
      { type: 'int', validator: validateFraction, trigger: 'blur' },
    ]
    

    对应的验证方法:

    export function validateFraction(rule, value, callback) {
      if (!value) {
        callback();
      }
      var reg = /^\d.([1-9]{1,2}|[0-9][1-9])$|^[1-9]\d{0,1}(.\d{1,2}){0,1}$|^100(.0{1,2}){0,1}$/;
      if (reg.test(value) === false) {
        callback(new Error('请输入正确成绩,最多保留两位小数'));
      }
    }
    

    在页面中引入验证规则定义的文件,并在export default中定义rule规则。

    使用语法

    {validator:验证方法, trigger:验证触发}

    vue.js常用的自定义校验方式

    关于自定义校验的详细写法,可参考官方文档中的示例。

    vue.js常用的自定义校验方式

    总结

    以上整理了一些常用的校验方法,涵盖表单中常见的场景,可以直接复制使用或根据实际需求调整。重点是掌握自定义校验的写法思路,后续遇到新的校验需求也能轻松应对。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    opencode安装skills教程及本地配置方法
    opencode安装skills教程及本地配置方法

    遇到OpenCode Skills无法加载或配置无效?本文手把手教你完成Skills的安装、环境变量设置及本地调试,避开常见坑点,让AI助手更懂你的代码习惯。

    如何开启Visual Studio2022实时代码分析警告提示
    如何开启Visual Studio2022实时代码分析警告提示

    解决 Visual Studio 2022 编辑时不显示代码分析警告的问题。指南涵盖 .NET 项目实时分析设置、Roslyn 分析器范围调整及错误列表来源筛选,确保开发者能高效利用实时代码诊断功能。

    如何在Visual Studio2022查看变量监视窗口调试程序
    如何在Visual Studio2022查看变量监视窗口调试程序

    详解 Visual Studio 2022 调试技巧:包括断点设置、监视窗口开启方法、变量添加步骤以及通过 F10 单步执行观察变量值变化的全过程。

    Visual Studio2017设置默认编码为UTF-8不带BOM
    Visual Studio2017设置默认编码为UTF-8不带BOM

    针对 Visual Studio 2017 缺乏全局默认编码选项的情况,详解如何利用 .editorconfig 设定项目级 UTF-8 无 BOM 规则,以及手动转换现有文件并校验字节的方法。

    Visual Studio2022F5调试提示启动项目未配置怎么修复
    Visual Studio2022F5调试提示启动项目未配置怎么修复

    解决 Visual Studio 2022 F5 调试报错问题,通过设置启动项目、检查解决方案属性及正确区分类库与应用项目,快速恢复调试功能。

    Visual Studio2022NuGet包还原失败离线处理方案
    Visual Studio2022NuGet包还原失败离线处理方案

    解决Visual Studio 2022离线环境中NuGet包还原失败的难题,涵盖依赖链分析、本地源配置、包集收集及隔离验证步骤,帮助开发者构建稳定的离线开发环境。

    Visual Studio2017大项目加载缓慢,优化加载性能技巧
    Visual Studio2017大项目加载缓慢,优化加载性能技巧

    解决Visual Studio 2017大型项目加载慢的实用指南。涵盖性能监测、扩展管理、文档恢复优化及版本兼容性检查,帮助开发者精准定位瓶颈并提升工作效率。

    Visual Studio2022设置多启动项目同时调试运行
    Visual Studio2022设置多启动项目同时调试运行

    详解 Visual Studio 2022 多启动项目配置方法,包括启动动作选择、顺序调整及调试技巧,帮助开发者高效调试分布式或前后端分离应用。

    fastapi下载文件接口实现教程
    fastapi下载文件接口实现教程

    深入解析在FastAPI框架中实现文件下载接口的完整方案,涵盖基于FileResponse的本地静态文件传输、基于StreamingResponse的分块流式传输、RFC 5987中文文件名编码规范、路径穿越安全防御及BackgroundTasks临时文件清理,并配备详细代码示例与架构解析图。

    码上飞 codeflying 平台功能介绍
    码上飞 codeflying 平台功能介绍

    了解码上飞CodeFlying如何利用自然语言生成应用。通过物品借用登记实例,学习需求解析、代码生成、测试优化及对话修改的核心操作流程。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。