7

我正在通过 JavaScript 从文本框中提取一个值。如果文本框为空,则返回NaN. 如果它为空、空等,我想返回一个空字符串。

我要做什么检查?if(NAN = tb.value)?

4

4 回答 4

17

嗯,这里有些不对劲。

在哪个浏览器中,空文本框返回 NaN?我从未见过这种情况发生,我无法重现它。

文本框的值实际上是一个字符串。空文本框返回空字符串!

哦,要检查某些东西是否为 NaN,您应该使用:

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

注意:isNaN()-function 返回true任何不能被解析为数字的东西,除了空字符串。这意味着它可以很好地检查数字输入(比正则表达式容易得多):

if (tb.value != "" && !isNaN(tb.value))
{
   // It's a number
   numValue = parseFloat(tb.value);
}
于 2009-04-27T13:52:25.870 回答
2

你也可以这样做:

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 认为它是八进制数。

于 2009-04-27T14:17:42.597 回答
1

假设您有对输入文本框的引用:

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

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

  if(isNaN(val)) return "";
  else return val;
}
于 2009-04-27T14:39:56.240 回答
0

您可以做的一件事是对文本框的值进行正则表达式检查,并确保它符合接受数字的格式,然后如果符合格式则执行您的过程,否则返回一个空字符串。

编辑:这是我面前的一些代码的一个例子(可能不是最好的正则表达式):

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 案例中,它可能不会那么混乱。

于 2009-04-27T13:18:31.910 回答