В настоящее время я использую этот 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 +/);