检查Javascript中的正整数:性能和安全性

检查Javascript中的正整数:性能和安全性,javascript,jquery,jquery-selectors,javascript-security,Javascript,Jquery,Jquery Selectors,Javascript Security,我已经编写(并复制)了几行Javascript,它很好地满足了我的目的。但我正试图找到一种更好的方法(跨浏览器和更好的性能)来实现这一点。我从一位朋友那里复制了isInteger函数,但我不明白为什么我们要在以下条件下检查字符串值: if (((c < "0") || (c > "9"))) return false; 我不明白为什么我们要在以下条件下检查字符串值 因为c是一个字符(实际上是一个单字符字符串),因为这是返回的。也就是说,isInteger函数可以更简单地使用正则表达

我已经编写(并复制)了几行Javascript,它很好地满足了我的目的。但我正试图找到一种更好的方法(跨浏览器和更好的性能)来实现这一点。我从一位朋友那里复制了
isInteger
函数,但我不明白为什么我们要在以下条件下检查字符串值:

if (((c < "0") || (c > "9"))) return false;
我不明白为什么我们要在以下条件下检查字符串值

因为
c
是一个字符(实际上是一个单字符字符串),因为这是返回的。也就是说,
isInteger
函数可以更简单地使用正则表达式编写:

function isPositiveInteger(s)
{
    return !!s.match(/^[0-9]+$/);
    // or Rob W suggests
    return /^\d+$/.test(s);
}
或者您可以采取另一种方法:将字符串转换为数字,确保其为正数,并确保数字的下限与原始值相同(因此为整数):

函数isPositiveInteger(s)
{
var i=+s;//转换为数字
如果(i<0)返回false;//确保它为正值
如果(i!=~~i)返回false;//确保没有小数部分
返回true;
}

if( +inputString > 0 ) {
}
如果它只是为了找出输入是否为正整数。如果您也不想允许数字带有小数点/浮点值,则应使用输入字段验证,如

<input type="text" pattern="\d+" required/>


这会告诉输入字段仅输入数字。
required
标志是可选的,如果存在,它将不允许任何提交按钮继续,除非满足所有模式。

parseInt('123fsd3r24',10)
>0
@MattBall:对,这确实是
parseInt
过于宽容的情况<代码>+对于隐式的
Number()
调用应该会更好。@jAndy Pi不是整数,好吧<代码>+Math.PI>0@RobW:我不确定我是否得到了它。正如您所知,ECMAscript中没有“整数”,只有数字。和
Math.PI
alreays是一个数值。@jAndy“Integer”在数学中表示整数,即不带小数的整数。PI看起来像3.1415…,它肯定不是整数大于
!!s、 匹配(/^[0-9]+$/)
test
方法更合适(返回一个布尔值),非字符串的
s
参数将自动得到很好的处理。@RobW当然,这也行。编辑。(我倾向于对使用
\d
有点谨慎,因为在某些编程语言中,它与来自其他字符集的数字字符以及
[0-9]
匹配。在JS中,使用
\d
作为
[0-9]
的简写是安全的,但并非所有语言都是如此)谢谢大家。。刚刚将URL添加到我正在处理的页面。。也许这有助于更好地理解。。我检查keyup上的每个字符,因为每个字符都需要验证。。本质上,输入字段应该只接受正整数。没有浮点数,0,字母表(我想这就是@RobW建议的新函数所做的。)@LuckySoni正整数,给你:
/^(?!0$)\d+$/.test(s)实际上我需要检查两个字段。。。其中只有一个应接受0。。我们是否可以根据需要使函数在两个字段中都工作?谢谢
function isPositiveInteger(s)
{
    var i = +s; // convert to a number
    if (i < 0) return false; // make sure it's positive
    if (i != ~~i) return false; // make sure there's no decimal part
    return true;
}
if( +inputString > 0 ) {
}
<input type="text" pattern="\d+" required/>