vue自定义校验方法整理(不定期更新中...)

vue中常常遇到一些需要自定义校验方法的场景,下面整理了我在开发过程中遇到的一些特殊场景,以及这些场景下我的处理方法(这个时不时遇到一个,因此不定期更新中…)
  • 金额输入限制场景:在提现页面要求:
    1.最低提现金额为3元,低于3元不可提现,按钮置灰切不可点击;
    2.输入必须是数字,输入非数字时,按钮设置灰色切不可点击,输入改为正常数字则,按钮变亮可点击;
    3.输入超出可提现额度时,按钮置灰,不可点击
    关键代码如下:
<-- 页面结构 -->
class="input-text"> <input type="tel" v-model="withdraw_amount" style="font-size: 16px;color: #000;" /> div> <-- cashNumber为可提现金额 --> <transition name="fade" v-if="(cashNumber>3||cashNumber==3)&&canclick"> <div class="page-bottom-btn" v-if="load" style="transition-delay: 0.1s;" > <a class="g-btn btn-blue" @click="submit :key="1">确定提现a> div> transition> <transition name="fade" v-else> <div class="page-bottom-btn" v-if="load" style="transition-delay: 0.1s;" > <p class="g-btn" style="background: #ccc;color:#fff" :key="2">确定提现p> div> transition> //以下为JS关键代码 data: { pageData: {}, cashNumber: "0", withdraw_amount:0, canclick:true, }, methods: { //请求数据时this.cashNumber = res.ret.balance;this.withdraw_amount=_this.cashNumber-0; isRealNum:function (val){ // isNaN()函数 把空串 空格 以及NUll 按照0来处理 所以先去除 if(val === "" || val ==null){ return false; } if(!isNaN(val)){ return true; }else{ return false; } }, submit:function (val){ this.withdraw_amount=Math.round(this.withdraw_amount*100)/100; console.log("提现金额为:"+this.withdraw_amount); } }, watch: { withdraw_amount:function(){ var _this=this; if(this.isRealNum(this.withdraw_amount)){ if((_this.cashNumber>3||_this.cashNumber==3)&&(_this.withdraw_amount>3||_this.withdraw_amount==3)){ _this.canclick=true; }else{ _this.canclick=false; } }else{ _this.canclick=false; } if(this.withdraw_amount>_this.cashNumber-0){ _this.withdraw_amount=_this.cashNumber; } }, }
  • 校验用户名、身份证号、银行卡号、手机号 规则如下
    1.姓名为2到4个汉字;
    2.输入身份证时不可以输入汉字,输入省份证合法;
    3.输入银行卡到第六位显示开户银行名称、图标、限额等信息;输入银行卡号合法;
    4.输入手机号合法;
    关键代码如下:
<-- 结构 -->
  • "text" name="username" v-model="username" v-on:blur="nameisChinese" placeholder="姓名" minlength="1" maxlength="4"/>
  • "text" name="idcard" v-model="idcard" v-on:blur="isIdCardNo" @keyup="checkIdinput" placeholder="身份证号" maxlength="18" />
  • "loginFooter" type="text" name="bankCard" v-model="bankCard" @keyup="showBanklimit" v-on:blur="CheckBankNo" placeholder="银行卡号" maxlength="19" />
  • "text" name="phonenum" v-model="phonenum" v-on:blur="checkphone" placeholder="银行预留手机号" maxlength="11"/>
  • //以下为关键JS代码 data: { tipTxt:"", username:"", //用户名 idcard:"", //身份证 bankCard:"", //银行卡号 phonenum:"", //电话 nameflag:0, //属性是否校验通过flag idflag:0, bankflag:0, phoneflag:0, }, methods: { tipBox:function(){ console.log(this.tipTxt); //执行封装的报错弹窗提醒,错误提示文本为this.tipTxt }, //校验用户名输入 输入2-4个汉字 nameisChinese:function(){ var this.username=this.username.replace(/(^\s+)|(\s+$)/g, ""); if(!this.username.match(/^[\u4e00-\u9fa5]{2,4}$/)){ this.nameflag=0; this.tipTxt="用户名请输入2-4个汉字"; this.tipBox(); }else{ this.nameflag=1; console.log("用户名符合标准!"); } }, checkIdinput:function(){ //控制输入身份证的过程中不可以输入汉字 var r = /^[^\u4e00-\u9fa5]+$/; if(r.test(this.idcard)){ console.log("1") }else{ console.log("error"); this.idcard=""; } }, isIdCardNo:function(num){ var num=this.idcard; var factorArr = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1); var error; var varArray = new Array(); var intValue; var lngProduct = 0; var intCheckDigit; var intStrLen = num.length; var idNumber = num; // initialize if ((intStrLen != 15) && (intStrLen != 18)) { error = "输入身份证号码长度不对!"; // alert(error); // this.tipTxt=error; this.tipTxt="输入合法的身份证号!"; //此处不一定要展示错误类型,提示错误即可,下同 this.tipBox(); //frmAddUser.txtIDCard.focus(); this.idflag=0; return false; } // check and set value for(i=0;iif ((varArray[i] < '0' || varArray[i] > '9') && (i != 17)) { error = "错误的身份证号码!."; // this.tipTxt=error; this.tipTxt="输入合法的身份证号!"; this.tipBox(); // alert(error); //frmAddUser.txtIDCard.focus(); this.idflag=0; return false; } else if (i < 17) { varArray[i] = varArray[i]*factorArr[i]; } } if (intStrLen == 18) { //check date var date8 = idNumber.substring(6,14); if (this.checkDate(date8) == false) { error = "身份证中日期信息不正确!."; this.tipTxt="输入合法的身份证号!"; this.tipBox(); // alert(error); this.idflag=0; return false; } // calculate the sum of the products for(i=0;i<17;i++) { lngProduct = lngProduct + varArray[i]; } // calculate the check digit intCheckDigit = 12 - lngProduct % 11; switch (intCheckDigit) { case 10: intCheckDigit = 'X'; break; case 11: intCheckDigit = 0; break; case 12: intCheckDigit = 1; break; } // check last digit if (varArray[17].toUpperCase() != intCheckDigit) { //error = "身份证效验位错误!...正确为: " + intCheckDigit + "."; //this.tipTxt=error; this.tipTxt="输入合法的身份证号!"; this.tipBox(); // alert(error); this.idflag=0; return false; } } else{ var date6 = idNumber.substring(6,12); if (this.checkDate(date6) == false) { // alert("身份证日期信息有误!."); //this.tipTxt="身份证日期信息有误!."; this.tipTxt="输入合法的身份证号!"; this.tipBox(); this.idflag=0; return false; } } // alert ("Correct."); this.idflag=1; return true; }, showBanklimit:function(){ var _this=this; var r = /^[0-9]*$/; if(r.test(this.bankCard)){ }else{ console.log("error"); this.bankCard=""; } if(this.bankCard.length>=6){ if(this.bankCard.length==6){ console.log(_this.bankCard); //此处请求接口 输入银行的银行限额信息接口 //大于等于6位根据接口可以判断出开户行名称、限额等相关信息 _this.showBankinfo=1;//接口请求成功是展示相应开户行信息 console.log("this place ok"); } }else{ this.showBankinfo=0; } }, //银行卡号Luhn校验算法 //luhn校验规则:16位银行卡号(19位通用): //1.将未带校验位的 15(或18)位卡号从右依次编号 1 到 15(18),位于奇数位号上的数字乘以 2。 //2.将奇位乘积的个十位全部相加,再加上所有偶数位上的数字。 //3.将加法和加上校验位能被 10 整除。 //bankno为银行卡号 luhnCheck: function(bankno){ var lastNum=bankno.substr(bankno.length-1,1);//取出最后一位(与luhn进行比较) var first15Num=bankno.substr(0,bankno.length-1);//前15或18位 var newArr=new Array(); for(var i=first15Num.length-1;i>-1;i--){ //前15或18位倒序存进数组 newArr.push(first15Num.substr(i,1)); } var arrJiShu=new Array(); //奇数位*2的积 <9 var arrJiShu2=new Array(); //奇数位*2的积 >9 var arrOuShu=new Array(); //偶数位数组 for(var j=0;jif((j+1)%2==1){//奇数位 if(parseInt(newArr[j])*2<9) arrJiShu.push(parseInt(newArr[j])*2); else arrJiShu2.push(parseInt(newArr[j])*2); } else //偶数位 arrOuShu.push(newArr[j]); } var jishu_child1=new Array();//奇数位*2 >9 的分割之后的数组个位数 var jishu_child2=new Array();//奇数位*2 >9 的分割之后的数组十位数 for(var h=0;h10); jishu_child2.push(parseInt(arrJiShu2[h])/10); } var sumJiShu=0; //奇数位*2 < 9 的数组之和 var sumOuShu=0; //偶数位数组之和 var sumJiShuChild1=0; //奇数位*2 >9 的分割之后的数组个位数之和 var sumJiShuChild2=0; //奇数位*2 >9 的分割之后的数组十位数之和 var sumTotal=0; for(var m=0;mfor(var n=0;nfor(var p=0;p//计算总和 sumTotal=parseInt(sumJiShu)+parseInt(sumOuShu)+parseInt(sumJiShuChild1)+parseInt(sumJiShuChild2); //计算luhn值 var k= parseInt(sumTotal)%10==0?10:parseInt(sumTotal)%10; var luhn= 10-k; if(lastNum==luhn){ console.log("银行卡验证通过"); this.bankflag=1; return true; }else{ //console.log("银行卡号必须符合luhn校验"); this.tipTxt="请输入正确的银行卡号"; this.tipBox(); this.bankflag=0; return false; } }, //检查银行卡号 CheckBankNo: function() { var _this=this; var bankno = bankno.replace(/\s/g,''); if(bankno == "") { this.tipTxt="请输入正确的银行卡号"; this.tipBox(); this.bankflag=0; return false; } if(bankno.length < 16 || bankno.length > 19) { this.tipTxt="请输入正确的银行卡号"; this.tipBox(); this.bankflag=0; return false; } var num = /^\d*$/;//全数字 if(!num.exec(bankno)) { this.tipTxt="请输入正确的银行卡号"; this.tipBox(); this.bankflag=0; return false; } //开头6位 var strBin = "10,18,30,35,37,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,58,60,62,65,68,69,84,87,88,94,95,98,99"; if(strBin.indexOf(bankno.substring(0, 2)) == -1) { //console.log("银行卡号开头6位不符合规范"); this.tipTxt="请输入正确的银行卡号"; this.tipBox(); this.bankflag=0; return false; } //Luhn校验 if(!this.luhnCheck(bankno)){ this.tipTxt="请输入正确的银行卡号"; this.tipBox(); this.bankflag=0; return false; } this.bankflag=1; return true; }, //手机号校验 checkphone:function(mobile){ var mobile=this.phonenum; if(mobile.length==5){ //console.log("5位") } if(mobile.length==0){ this.tipTxt="手机号码不能为空"; this.tipBox(); this.phoneflag=0; return false; } if(mobile.length!=11){ this.tipTxt="请输入有效的手机号码"; this.tipBox(); this.phoneflag=0; return false; } var myreg = /^[1][3,4,5,7,8][0-9]{9}$/; if(!myreg.test(mobile)){ this.tipTxt="请输入有效的手机号码"; this.tipBox(); this.phoneflag=0; return false; }else{ this.phoneflag=1; console.log('手机号码正确'); } }, }

    你可能感兴趣的:(Vue,前端,JavaScript)