JS金额校验

·  阅读 697

校验规则:(实时校验)

  • 不以任何字符开头或结尾
  • 以小数点开头,小数点前加0补位 [ .26 -> 0.26 ]
  • 0之后除小数点外不可以加任何数字或符号
  • 不能输入多个小数点
  • 小数点后截至两位
  • 针对于0 0.0 0.00 的 判断
  • 失焦后或提交时 小数点后不足两位自动补0 [ 0.2 -> 0.20 ]
onNumChange = e => {
    const num = e.target.value;
    console.log(num);

    if (!/^[\d\.]*$/.test(num)) return; // 包含特殊字符,阻止更新state

    if (num[0] === '.') return; // 第一位是小数点,阻止更新state

    if (num[0] === '0') { // 第一位是0
        if (num[1] && num[1] !== '.') return; // 第二位存在且不是小数点,阻止更新state
    }

    if (num.split('').filter(s => s === '.').length > 1) return; // 包含多个小数点,阻止更新state

    if (num.includes('.')) { // 小数
        if (num.split('.')[1].length > 2) return; // 小数位大于2,阻止更新state
    }

    if (!/\d+\.$/.test(num)) { // 以小数点结尾 按钮禁用置灰
        this.setState({
            isDisabled: true // isDisabled 按钮是否禁用
        });
    }

    if (num === '0' || num === '0.0' || num === '0.00') {
        this.setState({
            isDisabled: true // isDisabled 按钮是否禁用
        });
    }

    this.setState({
        numVal: num
    }, () => {
        // 实时调接口
    });
}
    
inputBlur = () => {
    let num = this.state.numVal;
    if (num.includes('.')) { // 存在小数
        let [num1, num2] = num.split('.');
        num2 = num2.padEnd(2, '0'); // 小数点后不足两位自动补全
        num = `${num1}.${num2}`;
    } else { // 整数
        num += '.00';
    }
    
    this.setState({
        numVal: num
    });
}
复制代码

待修改

patternType: {
    //正数类型
    'positive': /^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|[1-9]\d*$/
    
    // 最多两位小数
    'is2Decimal': /^\d+\.?\d{0,2}$/
    
    // 最多六位小数
    'is6Decimal': /^\d+\.?\d{0,6}$/
    'isMobileNumber': /^1(3[0-9]|4[57]|5[0-35-9]|7[0135678]|8[0-9])\d{8}|1(3[4-9]|4[7]|5[0-27-9]|7[08]|8[2-478])\d{8}|1(3[0-2]|4[5]|5[56]|7[0156]|8[56])\d{8}|1(3[3]|4[9]|53|7[037]|8[019])\d{8}$/,
    'isMail': /^[a-zA-Z0-9]+([._\\-]*[a-zA-Z0-9])*@([a-zA-Z0-9]+[-a-zA-Z0-9]*[a-zA-Z0-9]+.){1,63}[a-zA-Z0-9]+$/
    'isMailRational': /^\w+([.-]?\w+)*@\w+([.-]?\w+)*(\.\w{2,5})+$/
    'isSpecialChar': '[`~!@#$^&*()=|{}\':;\',\\[\\].<>/?~!@#¥……&*()——|{}【】‘;:”“\'。,、?]'
    
    //正数类型
    'positiveRational': /^-?[1-9]\d*\.\d*|-?0\.\d*[1-9]\d*|-?[1-9]\d*$/
    
    // 最多两位小数
    'is2DecimalRational': /^-?\d+\.?\d{0,2}$/

    // 最多三位小数
    'is3Decimal': /^\d+\.?\d{0,3}$/

    // 最多十位小数
    'is10Decimal': /^\d+\.?\d{0,10}$/
    'isSpecialCharFP': /[<>/]/
    'isPositive': /^[1-9]\d*$/
    
    // 密码
    'isOldPwd': /(^(\w){6,20}$)|(^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$)/,
    'isPwd': /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/,
  },
复制代码
分类:
前端
标签:
分类:
前端
标签:
收藏成功!
已添加到「」, 点击更改