Получение целочисленного значения из текстового поля, как проверить, является ли оно NaN или нулевым и т. д.?

StackOverflow https://stackoverflow.com/questions/793445

  •  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 все может быть не так загромождено.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top