Подтвердить что ты не робот

Regex javascript, почему точки и запятые соответствуют \

Почему это регулярное выражение '^[0-9]+\.?[0-9]*$' соответствует 12.2 и 12,2?

jsFiddle

var dot = '12.2',
    comma = '12,2',
    regex = '^[0-9]+\.?[0-9]*$';

alert( dot.match(regex) );
alert( comma.match(regex) );

Пока он работает на regexpal.com

4b9b3361

Ответ 1

Поскольку переменная regex является строкой, escape-последовательность \. - это просто ., которая соответствует любому символу (кроме новой строки). Если вы измените определение регулярного выражения для использования синтаксиса лимита REGExp или выполните escape-символ (\\.), он будет работать так, как вы ожидаете.

var dot = '12.2'
  , comma = '12,2'
  , regex = /^[0-9]+\.?[0-9]*$/;
      // or '^[0-9]+\\.?[0-9]*$'
alert(dot.match(regex));
alert(comma.match(regex));

Ответ 2

Вы уверены, что вам не нужно бежать назад? Вы знаете, это строка...

regex = /^[0-9]+\.?[0-9]*$/

или

regex = "^[0-9]+\\.?[0-9]*$"

Собственно, я бы рекомендовал вам написать так:

regex = /^\d+(\.\d+)?$/

Ответ 3

Поскольку вы пишете свое регулярное выражение в строке, вам нужно избежать косой черты.

regex = '^[0-9]+\\.?[0-9]*$';