可能重复:
Is there a (built-in) way in JavaScript to check if a string is a valid number?
我在HTML中有一个输入搜索栏
<form class="form-inline" action="javascript:displayResult()">
<input id="searchKey" >
<button onclick="result()" type="button" class="btn btn-warning btn ">
Go
</button>
</form>
这是Javascript函数
function result() {
search($('#searchKey').val());
if(typeof(searchKey)=="number") { // checking if this is a number
someFunction();
}
};
问题是,对于搜索栏的每个条目,我将值作为字符串获取,即使它在搜索栏中是“hello”或9789。我使用alert(typeof(searchKey));
进行验证,并始终将类型返回为字符串
我正在尝试区分搜索栏中的数字和字符串,我确信有更好的方法可以做到这一点,但我不确定为什么这不起作用
我无法使用parseInt(),因为我需要动态区分文本和数字
答案 0 :(得分:5)
<input type="text">
的值始终是字符串。但是,您可以使用parseInt
将其解析为数字。如果不能从字符串中解析数字,将导致NaN
。不要忘记您必须使用isNaN
,因为myNumber === NaN
不是有效的操作。
更好的是,使用isNaN(+searchKey)
,因为一元操作数会调用ToNumber
。但是,这将忽略空格。
9.3.1 ToNumber应用于字符串类型
应用于字符串的ToNumber将以下语法应用于输入String。如果语法不能解释 String作为StringNumericLiteral的扩展,然后ToNumber的结果是NaN。
[请参阅http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf了解实际规则]
11.4.6一元+算子
一元+运算符将其操作数转换为数字类型。 生产UnaryExpression:+ UnaryExpression的评估如下:
- 让expr成为评估UnaryExpression的结果。
- 返回ToNumber(GetValue(expr))。
醇>
答案 1 :(得分:3)
文本输入字段始终包含string
值。尝试if (!isNaN(searchKey))
来测试数值。或者,您可以使用正则表达式:/^\d+$/.test(searchKey)
答案 2 :(得分:3)
使用
if(!isNaN(searchKey))
而不是
if(typeof(searchKey)=="number")