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 шт):

Автор решения: ipatev_nn
-?(?<![\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>

→ Ссылка