Получение целочисленного значения из текстового поля, как проверить, является ли оно NaN или нулевым и т. Д.? - PullRequest
7 голосов
/ 27 апреля 2009

Я извлекаю значение из JavaScript из текстового поля. Если текстовое поле пусто, оно возвращает NaN. Я хочу вернуть пустую строку, если она пуста, пуста и т. Д.

Какую проверку я делаю? if(NAN = tb.value)

Ответы [ 4 ]

17 голосов
/ 27 апреля 2009

Хм, здесь что-то подозрительное.

В каком браузере пустое текстовое поле возвращает NaN? Я никогда не видел, чтобы это случилось, и я не могу воспроизвести это.

Значением текстового поля является строка. Пустое текстовое поле возвращает пустую строку!

Да, и чтобы проверить, является ли что-то NaN, вы должны использовать:

if (isNaN(tb.value))
{
   ...
}

Примечание. Функция isNaN() возвращает true для всего, что не может быть проанализировано как число, кроме пустых строк. Это означает, что это хорошая проверка для числового ввода (намного проще, чем регулярные выражения):

if (tb.value != "" && !isNaN(tb.value))
{
   // It's a number
   numValue = parseFloat(tb.value);
}
2 голосов
/ 27 апреля 2009

Вы также можете сделать это следующим образом:

var number = +input.value;
if (input.value === "" || number != number)
{
    // not a number
}

NaN равняется ничему, даже самому себе.

если вам не нравится использовать + для преобразования из String в Number, используйте обычный parseInt, но не забывайте всегда указывать основание

var number = parseInt(input.value, 10)

в противном случае «08» становится 0, потому что Javascript считает, что это восьмеричное число.

1 голос
/ 27 апреля 2009

Если у вас есть ссылка на текстовое поле ввода:

function getInteger(input) {
  if(!input || !input.value) return "";

  var val = parseInt(input.value, 10);

  if(isNaN(val)) return "";
  else return val;
}
0 голосов
/ 27 апреля 2009

Одна вещь, которую вы можете сделать, это проверить регулярное выражение значения текстового поля и убедиться, что оно соответствует формату принятого числа, а затем, если оно соответствует формату, выполнить ваш процесс, в противном случае вернуть пустую строку.

Редактировать : Это пример некоторого кода, который у меня есть (возможно, это не лучшее регулярное выражение):

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

...