vue中常常遇到一些需要自定义校验方法的场景,下面整理了我在开发过程中遇到的一些特殊场景,以及这些场景下我的处理方法(这个时不时遇到一个,因此不定期更新中…)
- 金额输入限制场景:在提现页面要求:
1.最低提现金额为3元,低于3元不可提现,按钮置灰切不可点击;
2.输入必须是数字,输入非数字时,按钮设置灰色切不可点击,输入改为正常数字则,按钮变亮可点击;
3.输入超出可提现额度时,按钮置灰,不可点击
关键代码如下:
<-- 页面结构 -->
<div 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: {
isRealNum:function (val){
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.输入手机号合法;
关键代码如下:
<-- 结构 -->
<li>
<input type="text" name="username" v-model="username" v-on:blur="nameisChinese" placeholder="姓名" minlength="1" maxlength="4"/>
</li>
<li>
<input type="text" name="idcard" v-model="idcard" v-on:blur="isIdCardNo" @keyup="checkIdinput" placeholder="身份证号" maxlength="18" />
</li>
<li>
<input id="loginFooter" type="text" name="bankCard" v-model="bankCard" @keyup="showBanklimit" v-on:blur="CheckBankNo" placeholder="银行卡号" maxlength="19" />
</li>
<li>
<input type="text" name="phonenum" v-model="phonenum" v-on:blur="checkphone" placeholder="银行预留手机号" maxlength="11"/>
</li>
data: {
tipTxt:"",
username:"",
idcard:"",
bankCard:"",
phonenum:"",
nameflag:0,
idflag:0,
bankflag:0,
phoneflag:0,
},
methods: {
tipBox:function(){
console.log(this.tipTxt);
},
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;
if ((intStrLen != 15) && (intStrLen != 18)) {
error = "输入身份证号码长度不对!";
this.tipTxt="输入合法的身份证号!";
this.tipBox();
this.idflag=0;
return false;
}
for(i=0;i<intStrLen;i++) {
varArray[i] = idNumber.charAt(i);
if ((varArray[i] < '0' || varArray[i] > '9') && (i != 17)) {
error = "错误的身份证号码!.";
this.tipTxt="输入合法的身份证号!";
this.tipBox();
this.idflag=0;
return false;
} else if (i < 17) {
varArray[i] = varArray[i]*factorArr[i];
}
}
if (intStrLen == 18) {
var date8 = idNumber.substring(6,14);
if (this.checkDate(date8) == false) {
error = "身份证中日期信息不正确!.";
this.tipTxt="输入合法的身份证号!";
this.tipBox();
this.idflag=0;
return false;
}
for(i=0;i<17;i++) {
lngProduct = lngProduct + varArray[i];
}
intCheckDigit = 12 - lngProduct % 11;
switch (intCheckDigit) {
case 10:
intCheckDigit = 'X';
break;
case 11:
intCheckDigit = 0;
break;
case 12:
intCheckDigit = 1;
break;
}
if (varArray[17].toUpperCase() != intCheckDigit) {
this.tipTxt="输入合法的身份证号!";
this.tipBox();
this.idflag=0;
return false;
}
}
else{
var date6 = idNumber.substring(6,12);
if (this.checkDate(date6) == false) {
this.tipTxt="输入合法的身份证号!";
this.tipBox();
this.idflag=0;
return false;
}
}
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);
_this.showBankinfo=1;
console.log("this place ok");
}
}else{
this.showBankinfo=0;
}
},
luhnCheck: function(bankno){
var lastNum=bankno.substr(bankno.length-1,1);
var first15Num=bankno.substr(0,bankno.length-1);
var newArr=new Array();
for(var i=first15Num.length-1;i>-1;i--){
newArr.push(first15Num.substr(i,1));
}
var arrJiShu=new Array();
var arrJiShu2=new Array();
var arrOuShu=new Array();
for(var j=0;j<newArr.length;j++){
if((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();
var jishu_child2=new Array();
for(var h=0;h<arrJiShu2.length;h++){
jishu_child1.push(parseInt(arrJiShu2[h])%10);
jishu_child2.push(parseInt(arrJiShu2[h])/10);
}
var sumJiShu=0;
var sumOuShu=0;
var sumJiShuChild1=0;
var sumJiShuChild2=0;
var sumTotal=0;
for(var m=0;m<arrJiShu.length;m++){
sumJiShu=sumJiShu+parseInt(arrJiShu[m]);
}
for(var n=0;n<arrOuShu.length;n++){
sumOuShu=sumOuShu+parseInt(arrOuShu[n]);
}
for(var p=0;p<jishu_child1.length;p++){
sumJiShuChild1=sumJiShuChild1+parseInt(jishu_child1[p]);
sumJiShuChild2=sumJiShuChild2+parseInt(jishu_child2[p]);
}
sumTotal=parseInt(sumJiShu)+parseInt(sumOuShu)+parseInt(sumJiShuChild1)+parseInt(sumJiShuChild2);
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{
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;
}
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) {
this.tipTxt="请输入正确的银行卡号";
this.tipBox();
this.bankflag=0;
return false;
}
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){
}
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('手机号码正确');
}
},
}