看到这个题我想到正则,但是不太精,就先想到了传统方法,欢迎大家交流讨论

function isUSD(str) {
  // 判断第一位是不是$
  if (str.slice(0,1) !== '$') return false;
      //如果是小数=> 有点没有小数位或 有小数位值非数字或 有小数位长度不是2位 =>返false
  if (str.split('.').length>1 && (!str.split('.')[1] || Number(str.split('.')[1]).toString() == 'NaN' || str.split('.')[1].length != 2)){
    return false
  }
  // 判断,号分隔后的所得是否符合要求
   return getStatus(str)
}

function getStatus(str) {
  // 取到去掉$和小数位后以‘,’号分隔后的数组
  let arr = str.slice(1,str.length).split('.')[0].split(',')
  //遍历该数组,every方法如果有一项条件为false终止循环,并且返回false
  return arr.every((item, i)=>{
    // 所有项长度小于等于3并且长度大于零,如果不是第一项每一个项长度只能为3
    return item.length <= 3 && item.length > 0 &&  (i !== 0 ? item.length == 3 : true)
  })
}