Javascript substring()从我的字符串返回错误的值?

时间:2016-02-21 06:47:40

标签: javascript

我有这段代码:

var sequence = $stateParams.testId.length == 14 ?
               parseInt($stateParams.testId.substring(11, 2)) : 0;

我期望将序列设置为01(最后两个数字)。但是会发生的是它返回198。

有人可以解释为什么会这样吗?

  

console.log($ stateParams.testId)//“01198-05282-01”

     

console.log(sequence)// 198

3 个答案:

答案 0 :(得分:1)

String#substring适用于索引。

substring的签名是

  

str.substring(indexStart [,indexEnd])

请注意,第二个参数是索引本身,而不是子字符串的长度。

Quoting from MDN

  

如果indexStart大于indexEnd,那么substring()的效果就好像交换了两个参数一样;例如,str.substring(1, 0) == str.substring(0, 1)

所以,

.substring(11, 2)相当于.substring(11, 2),它会给出子串"198-05282-"并在其上使用parseInt()将输出为198

  1. 使用第二个参数作为索引,此处为14(12 + 2)
  2. 使用 radix 参数parseInt为10以避免意外结果
  3. <强>代码:

    var str = '01198-05282-01';
    
    var sequence = str.length == 14 ?
        parseInt(str.substring(12, 14), 10) : 0;
    //                             ^^   ^^
    
    console.log(sequence);
    

    要使用length获取子字符串,请使用String#substr

    str.substr(12, 2)
    

答案 1 :(得分:0)

以下是解释:

您的查询字符串包含:"01198-05282-01"
让我们把它变成一个变量:

var a= "01198-05282-01";

如果我们将其子串,

a.substring(11,2)

它将返回:

"198-05282"

你的代码中有parseInt,因此

parseInt("198-05282");

将返回

198
  

substring()方法返回一个字符串的子集   索引和另一个,或通过字符串的结尾。

因此,要获得所需的输出,

var a= "01198-05282-01";

console.log(a.substring(12,14))  //returns "01"

parseInt(a.substring(12,14),10) //will return 1

使用您的代码:

var sequence = $stateParams.testId.length == 14 ?
               parseInt($stateParams.testId.substring(12, 14), 10) : 0;

作为

有关子字符串的更多信息:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/substring

正如Tushar所建议的那样,使用基数作为parseInt

的第二个参数

parseInt ()函数解析字符串参数并返回指定基数的整数(数学系统中的基数)。

  

radix :2到36之间的整数,表示上述字符串的基数(数学数字系统中的基数)。   为人类常用的十进制数字系统指定10。   始终指定此参数以消除读者的困惑和   保证可预测的行为。产生不同的实现   未指定基数时的不同结果,通常是默认值   值为10。

答案 2 :(得分:0)

substring()中详细解释了-的问题。如果您想获取/\d+$/ 之后的最后一个数字,可以使用正则表达式。

var str = "01198-05282-01";

var sequence = (str.match(/\d+$/) || [])[0] || 0; // Get the last number, use 0 as default if not present
sequence = parseInt(sequence, 10);

<强>代码:

substring()

substring()出了什么问题?

使用12并没有错,但它有以下限制。

  1. 静态 - 数字14typeof SomeClass。还有一件事要跟踪。
  2. 如果12到14之间的位置有非数字字符,则结果将是意外的。但是,使用RegEx将给出准确的结果,当字符串不以数字结尾时为零。