Задать вопрос

Почему не работает регулярное выражение?

Имеется регулярное выражение:
const pattern = /^\d{0,6}(\.?)\d{0,2}$/g;

как ограничить целую часть 6-ю символами? Я могу ввести 123456789 и все, точка уже не ставится

Полный пример

function fieldVerificationFloat(el, x, y){
			if (x == undefined) x = '';
			if (y == undefined) y = '2';
			const allowedCodes = [8, 9, 27, 35, 36, 37, 38, 39, 46, 110, 188];
			//const pattern = /^\d+(\.?)\d{0,2}$/g;
			const pattern = /^\d{0,6}(\.?)\d{0,2}$/g;
			//const pattern = new RegExp(`^\\d{0,${x}}(\\.?)\\d{0,${y}}$`, 'g');
			document.getElementById(el).oninput = function(e) {
				const value = this.value;
			  if( !(value.replace(/\s/g, '').match(pattern) || allowedCodes.some(code => code === e.keyCode)) ) this.value = value.slice(0, -1);
			}
		}
  • Вопрос задан
  • 327 просмотров
Подписаться 1 Простой 14 комментариев
Решения вопроса 1
bitniks
@bitniks
Go/PHP/Symfony developer
С подстановкой переменных
const x = 6;
const y = 2;
const pattern = new RegExp(`^\\d{0,${x}}(\\.\\d{0,${y}})?$`, 'g');
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@kova1ev
Попробуй так:
const pattern = new RegExp("^\\d{0," + x + "}(\\.?)\\d{0," + y + "}$", 'g');
Ответ написан
@v_gz
^\d{0,6}(\.?)\d{0,2}$/g
Если у вас нет точки, то цифр можно будет ввести 8.
Ваше выражение говорит:
Сначала 0..6 цифр; потом либо точка, либо пустота; потом 0..2 цифры.

А вам нужно:

Сначала 0..6 цифр; потом либо пустота, либо (точка; потом 0..2 цифры).

^\d{0,6}(\.\d{0,2})$/g
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы