Javascript 如何检查字符串是否为正整数,允许0和all-0小数
因此,为了检查字符串是否为正整数,我做了一些研究,在这里有人找到了这个解决方案: 然而,我将其用于测试,发现小数点后纯0的数字似乎不起作用。例如: 15==>有效 15.0=>不起作用:( 15.000=>不起作用:(Javascript 如何检查字符串是否为正整数,允许0和all-0小数,javascript,regex,Javascript,Regex,因此,为了检查字符串是否为正整数,我做了一些研究,在这里有人找到了这个解决方案: 然而,我将其用于测试,发现小数点后纯0的数字似乎不起作用。例如: 15==>有效 15.0=>不起作用:( 15.000=>不起作用:( 在现有方法的基础上,我如何允许小数点后的纯0并使其全部工作?请注意15.38不应该工作,但15.00应该工作。此处无需使用正则表达式 function isNormalInteger(str) { var n = parseInt(str); return n &g
在现有方法的基础上,我如何允许小数点后的纯0并使其全部工作?请注意15.38不应该工作,但15.00应该工作。此处无需使用正则表达式
function isNormalInteger(str) {
var n = parseInt(str);
return n > 0 && n == +str;
}
然后测试它:
isNormalInteger(15)
true
isNormalInteger(15.00)
true
isNormalInteger(15.38)
false
isNormalInteger(-15)
false
isNormalInteger(-15.1)
false
这里不需要使用正则表达式
function isNormalInteger(str) {
var n = parseInt(str);
return n > 0 && n == +str;
}
然后测试它:
isNormalInteger(15)
true
isNormalInteger(15.00)
true
isNormalInteger(15.38)
false
isNormalInteger(-15)
false
isNormalInteger(-15.1)
false
又快又脏
function isNormalInteger(str) {
var ival=parseInt(str);
return ival!=NaN && ival>=0 && ival==parseFloat(str);
}
又快又脏
function isNormalInteger(str) {
var ival=parseInt(str);
return ival!=NaN && ival>=0 && ival==parseFloat(str);
}
首先,函数应调用
isNormalNumber
而不是isNormalInteger
,因为它接受小数,然后这就是您需要的正则表达式:
函数isNormalNumber(str){
返回/^\+*[0-9]\d*(\.0+)$/.test(str);
}
警报(isNormalNumber(“+10.0”)+”::“+isNormalNumber(“+10.9”)+”::“+isNormalNumber(“+10”);
首先应调用函数isNormalNumber
,而不是isNormalInteger
,因为它接受小数,那么这就是您需要的正则表达式:
函数isNormalNumber(str){
返回/^\+*[0-9]\d*(\.0+)$/.test(str);
}
警告(isNormalNumber(“+10.0”)+”::“+isNormalNumber(“+10.9”)+”::“+isNormalNumber(“+10”);
整数没有小数位数,15.0
不是整数,这就是为什么它在“测试”时不起作用的原因。是的,最好不要使用前导“+”签名,允许纯0在小数点处。到目前为止,我最好的解决方案是^[0-9]\d*(\.0+)*$,这似乎是正确的吗?谢谢。@Anubhava你检查了我下面的答案了吗?它是否已经匹配了所有条件?整数没有小数点,15.0
不是整数,这就是为什么当“进行测试”。最好是。我不希望有前导“+”符号,允许小数点后纯0。到目前为止,我最好的解决方案是^[0-9]\d*(\.0+)*$,这似乎是正确的吗?谢谢。@Anubhava你检查了我下面的答案了吗?它不是已经符合你的所有条件了吗?嗨,chsdk,正则表达式很好,但是我怎么能允许0或0.00等呢?我试过了/^\+*[0-9]\d*(\.0+*$/这是正确的吗?是[0-9]一个有效的范围?@chsdkYep就像一个符咒,为了消除前导“+”的选项,我刚刚删除了\+*correct?@chsdkIt matches0
,它不是一个正整数,它也匹配0.0.0
,它不是一个偶数。很好的捕获!谢谢!实际上0很好,对于0.0.0.0,我使用了^[0-9]\d*(\.0+)?$现在它似乎运行良好,我将*改为?,这是一种正确的方法吗?@anubhavaCorrect方法在没有任何正则表达式的情况下使用,正如我在下面所示,但是对于正则表达式/^\d+(?:\.0+)?$/
对您来说很好。您好chsdk,正则表达式很好,但是我怎么能允许0或0.00等呢?我尝试了/^\+*[0-9]\d*(\.0+*)/这是正确的吗?是[0-9]一个有效的范围?@chsdkYep就像一个符咒,为了消除前导“+”的选项,我刚刚删除了\+*correct?@chsdkIt matches0
,它不是一个正整数,它也匹配0.0.0
,它不是一个偶数。很好的捕获!谢谢!实际上0很好,对于0.0.0.0,我使用了^[0-9]\d*(\.0+)?$现在它似乎运行良好,我将*改为?,这是一种正确的方法吗?@anubhavaCorrect方法在没有任何正则表达式的情况下使用,正如我在下面所示,但对于正则表达式/^\d+(?:\.0+)?$/
您可以使用。实际上,这个解决方案可能会出现错误,因为parseInt()
如果给定的字符串不是有效的数字,将给出NaN
。不,没有错误。如果调用isNormalInteger(“abc”)
它将正确返回false
实际上,此解决方案可能会出现错误,因为parseInt()
如果给定的字符串不是有效的数字,将给出NaN
。不,没有错误。如果调用isNormalInteger(“abc”)
它将正确返回false
+++我宁愿使用这种方法,而不是使用正则表达式。+++我宁愿使用这种方法,而不是使用正则表达式。