< uv-input inputAlign = " right" type = " number" v-model = " quantity" placeholder = " 请输入单价" border = " none" @input = " e => handleInput(e, 2)" />
const quantity = ref ( )
const handleInput = ( e, decimals ) => { setTimeout ( ( ) => { quantity = handleNumberInput ( e, decimals) } , 0 )
}
function handleNumberInput ( e : string | number , decimals : number = 2
) => { if ( e === "" ) return ; let result = "" ; result = String ( e) ; if ( ! decimals) { return ( result. replace ( / [^\d.] / g , "" ) . replace ( / ^0|[^\d]|[.] / g , "" ) ) ; } if ( decimals > 0 ) { const decimalRegex = new RegExp ( ` (\\.\\d{ ${ decimals} })\\d+$ ` , "g" ) ; result = result. replace ( / [^\d.] / g , "" ) . replace ( / ^0+(\d) / , "$1" ) . replace ( / ^\. / , "0." ) . replace ( / \. / g , ( s, offset, str ) => offset === str. indexOf ( "." ) ? s : "" ) . replace ( decimalRegex, "$1" ) . replace ( / ^0+([1-9]) / , "$1" ) . replace ( new RegExp ( ` (\\.[\\d]{ ${ decimals} }).*$ ` ) , "$1" ) ; } return result;
} ;