Получение целочисленного значения из текстового поля, как проверить, является ли оно NaN или нулевым и т. д.?
-
16-09-2019 - |
Вопрос
Я извлекаю значение через JavaScript из текстового поля.Если текстовое поле пусто, оно возвращает NaN
.Я хочу вернуть пустую строку, если она равна нулю, пуста и т. д.
Какую проверку мне сделать? if(NAN = tb.value)
?
Решение
Хм, что-то здесь подозрительно.
В каком браузере пустое текстовое поле возвращает NaN?Я никогда не видел подобного и не могу это воспроизвести.
Значение текстового поля фактически является строкой.Пустое текстовое поле возвращает пустую строку!
Да, и чтобы проверить, является ли что-то NaN, вы должны использовать:
if (isNaN(tb.value))
{
...
}
Примечание:А isNaN()
-функция возвращает true
для всего, что нельзя проанализировать как число, за исключением пустых строк.Это означает, что это хорошая проверка числового ввода (гораздо проще, чем регулярные выражения):
if (tb.value != "" && !isNaN(tb.value))
{
// It's a number
numValue = parseFloat(tb.value);
}
Другие советы
Вы также можете сделать это следующим образом:
var number = +input.value;
if (input.value === "" || number != number)
{
// not a number
}
NaN ничему не равен, даже самому себе.
если вам не нравится использовать + для преобразования строки в число, используйте обычный parseInt, но не забывайте всегда указывать базу
var number = parseInt(input.value, 10)
в противном случае «08» становится 0, потому что Javascript считает, что это восьмеричное число.
Предполагая, что у вас есть ссылка на текстовое поле ввода:
function getInteger(input) {
if(!input || !input.value) return "";
var val = parseInt(input.value, 10);
if(isNaN(val)) return "";
else return val;
}
Единственное, что вы можете сделать, это проверить регулярное выражение значения текстового поля и убедиться, что оно соответствует формату принятого числа, а затем, если оно соответствует формату, выполнить ваш процесс, в противном случае верните пустую строку.
Редактировать:Это пример из кода, который у меня есть передо мной (возможно, это не лучшее регулярное выражение):
var anum=/(^\d+$)/;
if (!anum.test(document.getElementById("<%=txtConceptOrderValue.ClientID %>").value))
{
alert("Order Value must be a valid integer");
document.getElementById("<%=txtConceptOrderValue.ClientID %>").focus();
return false;
}
Редактировать 2:Я также должен отметить, что я использую ASP.NET, поэтому у меня немного необычный способ доступа к текстовому полю.В вашем обычном случае с JavaScript все может быть не так загромождено.