Regex! Как ограничить ввод любого числа с максимальными 3 цифрами до и 6 цифрами после десятичной дроби c помощью regex replace?
Я написал примерное регуляторное выражение, но оно работает не верно.
const getFormattedValueInput = (value: string) => {
const removeСharsExceptNumberHyphenPoint = value.replace(/[^0-9.-]/g, '');
const removeMultiplePoints = removeСharsExceptNumberHyphenPoint.replace(/(\..*)\./g, '$1');
const removeMiddleHyphen = removeMultiplePoints.replace(/(?!^)-/g, '');
const removeMultipleLeadingZeros = removeMiddleHyphen.replace(/^0+(\d)/gm, '$1');
const formattedValue = removeMultipleLeadingZeros;
const valueCoordinates = formattedValue.replace(/^-?\d{0,3}(\.\d{0,6})?$/g, '');
return valueCoordinates;
};
Мне нужно ограничить ввод в текстовое поле следующим образом: первый знак может быть "-" , а может не быть, далее три цифры до 180, после ввод запретить, если только это не десятичная дробь через "." и после точки можно еще ввести шесть любых цифр. В итоге максимально/минимальное число на ввод может быть таким: -180.999999 / 180.999999
Ответы (1 шт):
-?(?<![\d.])(?:1[0-7]\d|180|\d{1,2})(?:\.\d{1,6})?(?![\d.])
-? - 0 или 1 символ -
(?<![\d.]) - негативный просмотр назад, что нет незахваченных цифр
(?:1[0-7]\d|180|\d{1,2}) - ограничение до 180, 00 так же будет валидно
(?:\.\d{1,6})? - необязательная группа для захвата цифр после точки
(?![\d.]) - негативный просмотр вперед, отменяем выбор если впереди есть точка или цифра
Пример: regex101.com
Пример html:
<!DOCTYPE html>
<html>
<body>
<form action="/action_page.php">
<label for="inp">Input:</label>
<input type="text" id="inp" pattern="-?(?<![\d.])(?:1[0-7]\d|180|\d{1,2})(?:\.\d{1,6})?(?![\d.])" title="диапазон от -180.999999 до 180.999999">
<input type="submit">
</form>
</body>
</html>