我放在一起的一个函数(运行但不在JSLint下验证)如下:
function toNumber(str)
{
str = str.toString().replace(/[^0123456789.-]/g,'');
if (str == "") {return 0;}
return parseFloat(str);
}
这是为了获取任何给定的字符串并将其转换为一个数字,以便在我的javascript中的其他地方使用。示例运行如下:
toNumber(" 5")=> 5
toNumber(" 3,276")=> 3276
toNumber(" -14b396Z")=> -14396
这里的问题是当我尝试使用JSLint验证它时,我得到两个我无法解决的错误。
line 25 character 36 str = str.toString().replace(/[^0123456789.-]/g,'');
Insecure '^'.
line 25 character 48 str = str.toString().replace(/[^0123456789.-]/g,'');
Unescaped '-'.
我知道我可以在/ RegExp /"中打开"和[^ ...]忽略第一个错误,但仍然留给我第二个错误。解决这两个错误的最佳方法是什么?我想如果我要改写这个,不管怎么说,我不妨这两个错误,而不是只是对“不安全”这个问题视而不见。使用的本质^。
谢谢你, - Aaron Nichols
答案 0 :(得分:0)
好的,首先,toNumber
处理,比方说," 123.12.3"和" 123.-123"像你想要的那样?
但是,如果我们不担心这样的事情,只想复制你最初得到的东西,那就太难了。
JSLint告诉你的是一个正则表达式不应该说出你 想要的东西,而应该定义你做什么想要。
在这种情况下,真的很容易做到 。而不是说,"我想替换任何不数字,点或破折号的东西,看看我是否还剩下任何东西",比如说,"我想要一切,从字符串的开头到结尾,再到 一个数字,点或短划线,或者我根本不想要一场比赛&#34 ;
我不是多次退货的忠实粉丝,如果Unnecessary 'else' after disruption
检查后我return parseFloat(str);
,JSLint会给你一个null
,所以让我们放一下在返回var中。
/*jslint sloppy:true, white:true */
function toNumber2(str)
{
var retVal = 0;
if (null !== str.match(/^[0123456789.\-]+$/))
{
retVal = parseFloat(str);
}
return retVal;
}
所以我做得那么快,但我认为这和你最初想要的一样。
我理解这条规则在你非常具体的情况下有点矫枉过正,但当你没有"不是"时,很容易让无意识的比赛漏掉。 ^
更复杂案例中的序列。在那些更复杂的情况下,这条规则可以成为一种合乎逻辑的救星。