Поскольку переменная 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
Поскольку вы пишете свое регулярное выражение в строке, вам нужно избежать косой черты.