分析
类型:JavaScript
分数:20分
难度:难
考点
- 掌握正则表达式
- 字符串 api 的使用
解题思路
第一题:使用正则表达式,替换 非数字和非大写X 的字符串为 空字符串
第二题:循环取出前9个字符,转成数字,依次与 1-9 进行乘法,还要累加求和,最后求除以11的余数,判断是否符合 ISBN10 字符串
第三题:表示从头(包含)开始截取,一直截取到最后一个字符(不包含),然后根据题目要求计算结果,转化为 ISBN-13 字符串
实现
第一题
修改 index.js 文件:
// 将用户输入的带分隔符的 isbn 字符串转换只有纯数字和大写 X 字母的字符串
// 入参 str 为转换为包含任意字符的字符串
function getNumbers(str) {
// TODO: 待补充代码
// 使用正则表达式,替换 非数字和非大写X 的字符串为 空字符串
const res = str.replace(/[^\d|X]/g,"");
return res;
}
第二题
修改 index.js 文件:
// 验证当前 ISBN10 字符串是否有效
// 入参 str 为待判断的只有纯数字和大写 X 字母的字符串
function validISBN10(str) {
// TODO: 待补充代码
const res = /^\d{9}.$/.test(str)
// console.log("正则表达式校验:",res)
if(res){
// 循环取出前9个字符,转成数字,依次与 1-9 进行乘法,还要累加
let sum = 0
for(let i = 0;i<=8;i++){
sum += (i+1) * parseInt(str.charAt(i))
}
// 除以11的余数
const res2 = sum % 11
if( res2 == 10 && str.charAt(9) === 'X'){
return true
}else if(res2 != 10 && str.charAt(9) == res2){
return true
}else{
return false
}
}else{
return false
}
}
第三题
修改 index.js 文件:
// 将用户输入的 ISBN-10 字符串转化为 ISBN-13 字符串
// 入参 isbn 为有效的 ISBN-10 字符串
function ISBN10To13(isbn) {
// TODO: 待补充代码
// slice(0,-1) 表示从头(包含)开始截取,一直截取到最后一个字符(不包含)
const isbn12 = "978" + isbn.slice(0,-1)
let sum = 0
for(let i = 0;i<=11;i++){
if( (i+1) % 2 === 0){ // 偶数位
sum += 3 * parseInt( isbn12.charAt(i) )
}else{ // 奇数位
sum += 1 * parseInt( isbn12.charAt(i) )
}
}
const res = sum % 10
if( res == 0){
return isbn12 + "0"
}else{
return isbn12 + (10 - res)
}
}