Skip to content

Latest commit

 

History

History
62 lines (56 loc) · 1.75 KB

#87-判断美元符号格式.md

File metadata and controls

62 lines (56 loc) · 1.75 KB

题目描述:

完成一个函数 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;
    }
}