1.格式化

想实现每四位增加一个空格
在数据源添加一个变量fixed 默认值为false
onChange里写入如下代码

  1. export function onChange({ value }) {
  2. //防止循环调用
  3. if(!this.state.fixed){
  4. this.state.fixed = true
  5. this.$('textField_kxa49qkh').setValue(value.replace(/\D/g, '').replace(/....(?!$)/g, '$& '))
  6. this.state.fixed = false
  7. }
  8. }

2.自定义校验

自定义校验银行卡号是否正确
在自定义函数中输入如下函数
image.png

新代码

百度百科的Luhn算法中的代码 优秀啊

  1. function luhn(num) {
  2. // 去除空格
  3. num = (num + '').replace(/\D+/g, '')
  4. const regExp = /^([1-9])(\d{15}|\d{18})$/
  5. // 校验非0开始及长度
  6. if (!regExp.test(num)) {
  7. return false
  8. }
  9. num = num.split('').reverse();
  10. let total = 0
  11. for (let i = 0; i < num.length; i++) {
  12. num[i] = parseInt(num[i]);
  13. total += i % 2 ? 2 * num[i] - (num[i] > 4 ? 9 : 0) : num[i];
  14. }
  15. if (total === 0) {
  16. return false;
  17. }
  18. return (total % 10) === 0;
  19. }

旧代码

  1. function luhnTest(bankNo) {
  2. //去除空格
  3. bankNo = bankNo.replace(/\s+/g, "")
  4. // 正则表达式匹配规则 1-9(不为0)开头,并且总共16位或19位
  5. const regExp = /^([1-9])(\d{15}|\d{18})$/
  6. if (!regExp.test(bankNo)) {
  7. return false
  8. }
  9. // 取最后一位
  10. const lastNum = parseInt(bankNo.substr(bankNo.length - 1, 1))
  11. const elseStr = bankNo.substr(0, bankNo.length - 1)
  12. // 其他位数反转顺序
  13. const reverseStr = elseStr.split('').reverse().join('')
  14. let sumNum = 0
  15. for (const index in reverseStr) {
  16. let num = parseInt(reverseStr[index])
  17. if (index % 2 === 0) {
  18. // 奇数位
  19. num = num * 2
  20. if (num < 10) {
  21. sumNum += num
  22. } else {
  23. // 加上个位
  24. sumNum += num % 10
  25. // 加上十位
  26. sumNum += Math.floor(num / 10)
  27. }
  28. } else {
  29. // 偶数位
  30. sumNum += num
  31. }
  32. }
  33. // console.log(sumNum)
  34. //如果被10整除则校验通过
  35. return (sumNum + lastNum) % 10 === 0
  36. }