题目描述:
完成一个函数 isUSDFormat
返回 true/false 来判断一个字符串是否符合美元格式:
1、以 $
开头
2、如果是小数,保留两位小数;如果不是小数则不显示小数部分
3、整数部分从小数点上一位开始每隔三位用 ,
分割开来
4、如果整数部分从数字 0
开始,则只会显示一位 0
例如:
isUSDFormat('$1') // => true
isUSDFormat('$1.0') // => false
isUSDFormat('$100,000.00') // => true
isUSDFormat('$0,000.00') // => false
isUSDFormat('$0.00') // => true
isUSDFormat('$11,23,345.33') // => false
isUSDFormat('$1,123,345.33') // => true
参考答案:
const isUSDFormat = (str) => {
if(str[0] !== '$') return false;
if(!/^[0-9]+.?[0-9]*/g.test(str.slice(1).replace(/\,/g, ''))) return false;
let arr = str.slice(1).replace(/\,/g, '').split('.');
if(arr.length > 2) return false;
let left = arr[0];
let right = arr[1];
if(!/^[0-9,]+$/g.test(left)) return false;
if(right&&!/^[0-9]+$/g.test(right)) return false;
// 去除整数部分,开头为0的
if(!left) return false;
if(left.length !== 1 && left[0] === '0') return false;
let leftArr = left.split('');
for(let i = leftArr.length-3; i > 0; i=i-3) {
leftArr.splice(i,0,',');
}
if(leftArr.join('') === str.slice(1).split('.')[0]) {
// 这是有小数的
if(right) {
if(right.length === 2 && right.length !== '00') {
return true;
} else {
return false;
}
} else {
if(str.slice(-1) === '.') {
return false;
}
return true;
}
} else {
return false;
}
}