В моем проекте у меня есть поле с именем Rate , которое может принимать следующие значения: Например:
Условия:
- Разрешены только цифры.
- Только две цифры после десятичной точки.
- Запрещено использование букв и других символов.
Это фрагмент кода, который я использую
handleCheck = (e)=> {
let onlyNums = e.target.value.replace(/[^0-9\.,%]/g, '');
var str = '';
var isperc = false;
if(onlyNums.indexOf('.') !== -1)
{
var arr = onlyNums.split(".");
if(arr[1].length >2)
{
if( arr[1].indexOf('%') !== -1)
isperc = true;
arr[1] = arr[1].slice(0, 2);
}
if(isperc)
e.target.value = arr[0] + '.' + arr[1] + '%';
else
e.target.value = arr[0] + '.' + arr[1];
}
if(onlyNums.indexOf('%') !== -1)
{
str = onlyNums.indexOf('%');
var start = (str + 1);
onlyNums = e.target.value.slice(0, start);
e.target.value=onlyNums;
}
}
На рисунке выше показана проблема.Поле Rate также принимает буквы, прежде чем ставить десятичную точку.
как мне изменить мой код, чтобы избежать этой проблемы?Или Как я могу преобразовать регулярное выражение \d+(\.\d\d)?%?
, подобное тому, которое я использовал внутри функции replace в вопросе, потому что это регулярное выражение не работает с моим кодом