#87 判断美元符号格式


  • 0
    administrators

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

  • 0
    管理员

    const isUSDFormat = str => (/^\$([1-9]\d{0,2}(,\d{3})*|0)(\.\d{2})?$/).test(str)
    

  • 0

    和上面的答案出奇地一致,看来正则没多少种写法

    const isUSDFormat = (str) => /^\$(0|([1-9]\d{0,2}(,\d{3})*))(\.\d{2})?$/.test(str)
    

  • 0

    const isUSDFormat = (str) => {
      return /^(\$([1-9](\d{1,2})?(,[0-9]{3})*)|\$0)(?:\.\d{2})?$/.test(str);
    }
    //喝得大醉还是写的通过了,貌似跟上面各位的答案是几乎一致的,看来正则没多少种写法。
    

  • 0

    可能就我的办法比较笨了

    const isUSDFormat = (str) => {
       const reg = /^\$([^.]*?)(\.\d{2})?$/g
       if (!reg.test(str)) return false;
       reg.lastIndex = 0;
       const match = reg.exec(str)[1];
       if (/^0/.test(match) && match.replace(',', '').replace(/\s+/g, '').length > 1) {
        return false;
       }
       const _reg = /^(\d{3},)*?(\d{1,3})$/;
       return _reg.test(match.split('').reverse().join(''))
    }
    

登录后回复
 

与 ScriptOJ 的连接断开,我们正在尝试重连,请耐心等待