Javascript substring()从我的字符串返回错误的值?
我有以下代码:Javascript substring()从我的字符串返回错误的值?,javascript,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(序列)//198 以下是解释: 您的查
var sequence = $stateParams.testId.length == 14 ?
parseInt($stateParams.testId.substring(11, 2)) : 0;
我希望序列设置为01(最后两个数字)。但结果是它返回198
有人能解释为什么会这样吗
console.log($stateParams.testId)/“01198-05282-01”
console.log(序列)//198
以下是解释: 您的查询字符串包含:
“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)//将返回1
使用您的代码:
var sequence = $stateParams.testId.length == 14 ?
parseInt($stateParams.testId.substring(12, 14), 10) : 0;
作为
有关子字符串的详细信息:
正如Tushar suggessted使用基数作为第二个参数
函数解析字符串参数并返回指定基数(数学数字系统中的基数)的整数
基数:介于2和36之间的整数,表示上述字符串的基数(数学数字系统中的基数)。
为人类常用的十进制数字系统指定10。
始终指定此参数以消除读卡器混淆并
保证可预测的行为。不同的实现产生不同的结果
未指定基数时的不同结果,通常为默认值
将该值设置为10
使用索引
子字符串的签名是
str.substring(indexStart[,indexEnd])
请注意,第二个参数是索引本身,而不是子字符串的长度
如果indexStart
大于indexEnd
,则substring()
的效果就像两个参数被交换一样;例如,str.substring(1,0)==str.substring(0,1)
所以
.substring(11,2)
相当于。substring(11,2)
将给出子字符串“198-05282-”
,并在其上使用将给出输出为198
使用第二个参数作为索引,这里是14(12+2)
将基数参数设置为parseInt
as 10以避免意外结果
代码:
var str = '01198-05282-01';
var sequence = str.length == 14 ?
parseInt(str.substring(12, 14), 10) : 0;
// ^^ ^^
console.log(sequence);
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()
的问题在中有很好的解释。如果要获取-
之后的最后一个数字,可以使用regex
/\d+$/
代码:
var str = '01198-05282-01';
var sequence = str.length == 14 ?
parseInt(str.substring(12, 14), 10) : 0;
// ^^ ^^
console.log(sequence);
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()
没有错,但它有以下限制
它是静态的-数字12
和14
。还有一件事需要注意
如果在12到14之间的位置有非数字字符,结果将是意外的。然而,当字符串不以数字结尾时,使用正则表达式将给出准确的结果,即零
这与角度有关吗?我使用AngularJS,但它只是一个普通的javascript变量