js控制input框只能输入数字和一位小数点且小数点后面只有两位小数
/**
* 保留小数点后N位小数
* @param value string 需要转换的值
* @param digit number 小数点位数, 默认保留两位小数
* @returns
*/
/**
1: 首位不能为类似于 01、02的金额
2: 首位不能以-.开头
*/
value = value
.replace(/[^\d.-]/g, '')
.replace(/^\./g, '')
.replace(/^-\.*/g, '-') // 首位不能以-.开头
.replace(/\.{2,}/g, '.')
.replace(/^(0(\d)+|\.)/g, '$2') // 首位不能为类似于 01、02的金额
.replace('.', '$#$').replace(/\./g, '').replace('$#$', '.')
.replace(/^(-)*(\d+)\.((\d){2}).*$/, '$1$2.$3')
// 不允许输入负数
export const keepPointByDigit = (value: string, digit = 2) => {
// 定义正则表达式,用于最终处理
const reg = new RegExp(`^(\\d+)(\\.\\d{0,${digit}})?.*`);
// 处理输入值
value = value
.replace(/[^\d.]/g, '') // 移除所有非数字和非小数点字符
.replace(/\.{2,}/g, '.') // 将连续的小数点替换为单个小数点
.replace(/^0+(?!\.)/g, '0') // 如果以0开头且不是"0.",移除多余的0
.replace(/^0([1-9]+)/, '$1') // 移除开头多余的0,但保留单个0
.replace(/^\./, '0.') // 如果以"."开头,前面补充"0"
.replace(/\.(?=.*\.)/g, '') // 移除除了第一个小数点外的其他小数点
.replace(reg, '$1$2'); // 使用正则表达式截断小数点后多余的位数
return value;
}
// 允许输入负数
export const keepPointByDigit = (value: string, digit = 2) => {
// 定义正则表达式,用于最终处理
const reg = new RegExp(`^-?(\\d+)(\\.\\d{0,${digit}})?.*`);
// 处理输入值
value = value
.replace(/[^\d.-]/g, '') // 移除所有非数字、非小数点和非负号字符
.replace(/\.{2,}/g, '.') // 将连续的小数点替换为单个小数点
.replace(/-+/g, '-') // 移除多余的负号
.replace(/^-/, '#$#$') // 临时替换负号以处理其他替换
.replace(/^\./, '0.') // 如果以"."开头,前面补充"0"
.replace(/\.(?=.*\.)/g, '') // 移除除了第一个小数点外的其他小数点
.replace(/^0+(?!\.|$)/, '') // 如果以0开头且不是"0.",移除开头的0
.replace(/#\$#\$/, '-') // 恢复负号
.replace(reg, '$1$2'); // 使用正则表达式截断小数点后多余的位数
return value;
}
<el-input class="search-select-social" v-model="ruleForm.jiJinApplyAmount" @input="changeInputVal('jiJinApplyAmount')">
<span slot="suffix" class="unit">元</span>
</el-input>
data() {
return {
rules: [
jiJinApplyAmount: [
{ required: true, message: '申报基数不能为空', trigger: 'blur' },
{ validator: this.validateNum, trigger: 'blur' }
]
}
}
methods: {
changeInputVal(key) {
let inputVal = this.ruleForm[key]
inputVal = inputVal
.replace(/[^\d.]/g, '')
.replace(/\.{2,}/g, '.')
.replace(/^(0(0)+|\.)/g, '')
.replace('.', '$#$').replace(/\./g, '').replace('$#$', '.')
.replace(/^(-)*(\d+)\.((\d){2}).*$/, '$1$2.$3')
//保留n位小数
// .replace(/^(-)*(\d+)\.(\d{1,n}).*$/, '$1$2.$3')
this.ruleForm[key] = inputVal
},
validateNum(rule, value, callback) {
if (value[value.length - 1] === '.') {
callback(new Error('请输入正确的格式'))
} else {
callback()
}
},
}
<!--input只允许输入整数-->
<input type="text" name="a" onkeyup="value=value.replace(/[^\d]/g,'')" >
<!--input只允许输入整数和小数(小数只保留小数点后两位)-->
<input type="text" name="aa" onkeyup="value=value.match(/\d+\.?\d{0,2}/,'')" >
<input type="text" name="aa" oninput="value=value.match(/\d*(\.\d{0,2})?/)[0]" >
<!--限制文本框只能输入正数、小数、负数-->
<input type="text" onkeyup="this.value=this.value.replace(/[^\-?\d.]/g,'')"/>