Старый вопрос, но в данных ответах несколько точек.
Научная нотация.
!isNaN('1e+30')
is true
, однако в большинстве случаев, когда люди
Большие плавающие числа могут вести себя странно
Наблюдать (используя Node.js):
> var s = Array(16 + 1).join('9')
undefined
> s.length
16
> s
'9999999999999999'
> !isNaN(s)
true
> Number(s)
10000000000000000
> String(Number(s)) === s
false
>
] С другой стороны:
> var s = Array(16 + 1).join('1')
undefined
> String(Number(s)) === s
true
> var s = Array(15 + 1).join('9')
undefined
> String(Number(s)) === s
true
>
Итак, если вы ожидаете String(Number(s)) === s
, тогда лучше ограничьте свои строки до 15 цифр максимум (после опущения ведущих нулей).
Infinity
> typeof Infinity
'number'
> !isNaN('Infinity')
true
> isFinite('Infinity')
false
>
Учитывая все это, проверяя, что данная строка является числом, удовлетворяющим всем следующим:
Number
и обратно в String
не является такой простой задачей. Вот простая версия:
function isNonScientificNumberString(o) {
if (!o || typeof o !== 'string') {
// Should not be given anything but strings.
return false;
}
return o.length <= 15 && o.indexOf('e+') < 0 && o.indexOf('E+') < 0 && !isNaN(o) && isFinite(o);
}
Однако даже этот далеко не полный. Ведущие нули здесь не обрабатываются, но они проводят проверку длины.
date('Y-m-d H:i:s')
Посмотрите здесь для более подробной информации: http://pl.php.net/manual/en/function.date.php