В настоящее время я использую этот reg exp:
var valid = (value.match(/^\d+$/));
Но для цифр типа "0.40" или "2.43" это не работает. Как я могу изменить этот reg exp выше, чтобы соответствовать поплавкам?
В настоящее время я использую этот reg exp:
var valid = (value.match(/^\d+$/));
Но для цифр типа "0.40" или "2.43" это не работает. Как я могу изменить этот reg exp выше, чтобы соответствовать поплавкам?
var valid = (value.match(/^-?\d*(\.\d+)?$/));
Вам не нужно регулярное выражение для этого! isNaN будет отличать ваше значение до Number:
var valid = !isNaN(value);
Например:
!isNaN('0'); // true
!isNaN('34.56'); // true
!isNaN('.34'); // true
!isNaN('-34'); // true
!isNaN('foo'); // false
!isNaN('08'); // true
Нежелательное редактирование (спасибо CMS):
Принудительное принуждение типа !isNaN(''), !isNaN(' '), !isNaN('\n\t') и т.д. все true!
Тест пробелов + isNaN FTW:
var valid = !/^\s*$/.test(value) && !isNaN(value);
Тьфу.
Продолжая с помощью @Crescent Fresh, некоторое время назад мне приходилось выполнять проверку числа, но мне нужно было проверить, содержит ли переменная число, не зная его type, это может быть String, содержащее числовое значение, как в этом случае (я должен был учитывать также экспоненциальную нотацию и т.д.), объект Number, в основном ничего, что я не мог бы сделать допуском какого-либо типа.
И мне пришлось позаботиться о неявном преобразовании типов, например, когда я указал на @Crescent, isNaN было недостаточно для моего случая:
// string values
!isNaN(' ') == true;
!isNaN('\t\t') == true;
!isNaN('') == true;
// boolean values
!isNaN(true) == true;
!isNaN(false) == true;
// etc..
В итоге я написал набор 30 + модульных тестов, которые вы можете найти и запустить здесь, и следующая функция - это та, которая проходит все мои тесты:
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
Здесь моя версия RegExp.
var n = /^[+-]?((\.\d+)|(\d+(\.\d+)?))$/;
Match
n.test('3');
n.test('3.0');
n.test('0.3');
n.test('.3');
n.test('+3');
n.test('+3.0');
n.test('+0.3');
n.test('+.3');
n.test('-3');
n.test('-3.0');
n.test('-0.3');
n.test('-.3');
Не соответствуют
n.test('');
n.test('+');
n.test('-');
Это то, что я использую
/[\+]?([\-]?([0-9]{1,})?[\.]?[0-9]{1,})/
var valid = (value.match(/^[\d.]+$/));
var valid = value.match(/\ d +?.\d +/);