1.格式化
想实现每四位增加一个空格
在数据源添加一个变量fixed
默认值为false
在onChange
里写入如下代码
export function onChange({ value }) {
//防止循环调用
if(!this.state.fixed){
this.state.fixed = true
this.$('textField_kxa49qkh').setValue(value.replace(/\D/g, '').replace(/....(?!$)/g, '$& '))
this.state.fixed = false
}
}
2.自定义校验
自定义校验银行卡号是否正确
在自定义函数中输入如下函数
新代码
百度百科的Luhn算法中的代码 优秀啊
function luhn(num) {
// 去除空格
num = (num + '').replace(/\D+/g, '')
const regExp = /^([1-9])(\d{15}|\d{18})$/
// 校验非0开始及长度
if (!regExp.test(num)) {
return false
}
num = num.split('').reverse();
let total = 0
for (let i = 0; i < num.length; i++) {
num[i] = parseInt(num[i]);
total += i % 2 ? 2 * num[i] - (num[i] > 4 ? 9 : 0) : num[i];
}
if (total === 0) {
return false;
}
return (total % 10) === 0;
}
旧代码
function luhnTest(bankNo) {
//去除空格
bankNo = bankNo.replace(/\s+/g, "")
// 正则表达式匹配规则 1-9(不为0)开头,并且总共16位或19位
const regExp = /^([1-9])(\d{15}|\d{18})$/
if (!regExp.test(bankNo)) {
return false
}
// 取最后一位
const lastNum = parseInt(bankNo.substr(bankNo.length - 1, 1))
const elseStr = bankNo.substr(0, bankNo.length - 1)
// 其他位数反转顺序
const reverseStr = elseStr.split('').reverse().join('')
let sumNum = 0
for (const index in reverseStr) {
let num = parseInt(reverseStr[index])
if (index % 2 === 0) {
// 奇数位
num = num * 2
if (num < 10) {
sumNum += num
} else {
// 加上个位
sumNum += num % 10
// 加上十位
sumNum += Math.floor(num / 10)
}
} else {
// 偶数位
sumNum += num
}
}
// console.log(sumNum)
//如果被10整除则校验通过
return (sumNum + lastNum) % 10 === 0
}