校验规则:(实时校验)
- 不以任何字符开头或结尾
- 以小数点开头,小数点前加
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}$/,
},