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
Ответы
Ответ 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]*$';
Ответ 4
Ваше регулярное выражение должно быть
regex = /^[0-9]+\.?[0-9]*$/;
Обратитесь к https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/regexp для правильного синтаксиса.