Проверка десятичных чисел в JavaScript — IsNumeric()
А-а-а! Не слушайте ответы vanilla-javascript регулярных выражений. RegEx javascript-library неприятен для этого, и я number говорю не только о производительности. С numbers вашим регулярным выражением validate так легко сделать незаметные, что vanilla-javascript невозможно заметить ошибки.
Если validate вы не можете использовать validations isNaN()
, это должно работать намного validate лучше:
function IsNumeric(input)
{
return (input - 0) == input && (''+input).trim().length > 0;
}
Вот как это работает:
Выражение js (input - 0)
заставляет JavaScript выполнять form-validation приведение типов к вашему numbers входному значению; его нужно validations сначала интерпретировать numbers как число для операции вычитания. Если ecmascript это преобразование в число ecmascript не удастся, выражение приведет javascript к NaN
. Затем этот числовой результат validator сравнивается с исходным значением, которое validate вы передали. Поскольку левая vanilla-javascript часть теперь числовая, снова js используется приведение типов. Теперь, когда validations ввод с обеих сторон был приведен vanilla-javascript к одному и тому же типу из number одного и того же исходного js значения, можно подумать, что js они всегда должны быть одинаковыми numbers (всегда истинными). Однако validator существует специальное правило, которое ecmascript гласит, что NaN
никогда не равно form-validation NaN
, поэтому значение, которое number нельзя преобразовать в число validator (и только значения, которые .js нельзя преобразовать в числа), будет form-validation иметь значение false.
Проверка javascript длины предназначена для частного javascript случая с пустыми строками. Также javascript обратите внимание, что он ecmascript не работает в вашем тесте vanilla-javascript 0x89f, но это потому, что form-validation во многих средах это нормальный validation способ определить числовой number литерал. Если вы хотите поймать ecmascript этот конкретный сценарий, вы validations можете добавить дополнительную validations проверку. Еще лучше, если ecmascript это причина, по которой вы vanilla-javascript не используете isNaN()
, тогда просто validations оберните свою функцию вокруг numbers isNaN()
, которая также может выполнять javascript дополнительную проверку.
Таким javascript-library образом, если вы хотите узнать, можно ли преобразовать значение в число, на самом деле попробуйте преобразовать его в число.
Я вернулся и провел js некоторое исследование, почему строка validations с пробелами не дала ожидаемого validation результата, и я думаю, что js теперь понял: пустая строка number приводится к 0
, а не к NaN
. В validations этом случае можно просто number обрезать строку перед проверкой vanilla-javascript длины.
Запуск модульных тестов vanilla-javascript для нового кода, и он терпит input-validation неудачу только на бесконечных validations и логических литералах, и numbers единственный раз, когда это validations должно быть проблемой, - это validate если вы генерируете код (действительно, кто validate будет вводить литерал и проверять, является validate ли он числовым? Вы должны vanilla-javascript знать), и генерировать такой код js было бы странно.
Но, опять form-validation же, единственная причина когда-либо использовать это, если по какой-то причине вам нужно избегать isNaN().
javascript
validation
numbers
Проверка десятичных чисел в JavaScript — IsNumeric()
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.