首页 > 试题广场 >

判断是否符合 USD 格式

[编程题]判断是否符合 USD 格式
  • 热度指数:45949 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定字符串 str,检查其是否符合美元书写格式
1、以 $ 开始
2、整数部分,从个位起,满 3 个数字用 , 分隔
3、如果为小数,则小数部分长度为 2
4、正确的格式如:$1,023,032.03 或者 $2.03,错误的格式如:$3,432,12.12 或者 $34,344.3
示例1

输入

'$20,933,209.93'

输出

true
function isUSD(str) {
    return /^\$(\d{1,3})(,\d{3})*(\.\d{2})*$/.test(str);
}

发表于 2015-07-14 11:07:33 回复(2)
更多回答
推荐
本题注意点有必须是USD格式,以$开头,数字结尾,$和小数点的转义。
首先,开头必是$,而正则表达式中$表示结尾,需要进行转义,因此开头为^\$
然后$后必然接数字,并且最少一位,最多三位数,可用{m,n}表示,最少m位,最多n位,因此此段为\d{1,3}
接着,后面如还有数,则必然有,分隔,并且后面必有3个数,类似于,XXX的格式会出现0或者n次,因此此段可表示为(,\d{3})*
最后,如有小数部分,则注意对小数点进行转义,此段可表示为(\.\d{2})?
因此,最后的正则表达式为/^\$\d{1,3}(,\d{3})*(\.\d{2})?$/
使用test方法去检测str
function isUSD(str) { 
   return /^\$\d{1,3}(,\d{3})*(\.\d{2})?$/.test(str);
}

编辑于 2015-08-18 20:55:47 回复(21)
function isUSD(str) {
    //0开头或者非0开头
    //有小数或者没小数
    return/^\$([1-9]\d{0,2}(,\d{3})*|0)(\.\d{2})?$/.test(str);
}

发表于 2016-09-03 21:46:36 回复(0)
function isUSD(str) {
    var reg = /^\$(0|[1-9]|[1-9]\d{0,2})(,\d{3})*(\.\d{2})?$/;
    return reg.test(str);
}
正则表达式分为四部分
$符:$
匹配紧跟$符的数字:(0|[1-9]|[1-9]\d{0,2})
匹配逗号和跟在逗号后面的数字(,\d{3})*
匹配点号和小数位(\.\d{2})?


发表于 2016-10-11 21:31:58 回复(1)
function isUSD(str) {
//要考虑到只存在个位,例如$0.21的情况
    return /^\$(0|[1-9]\d{0,2})(,\d{3})*(\.\d{2})?$/.test(str)
}

发表于 2018-10-24 21:30:40 回复(0)
function isUSD(str) {  
   return /^\$[1-9]\d{0,2}(,\d{3})*(\.\d{2})?$/.test(str);  
}  

发表于 2017-09-07 14:30:13 回复(0)
除了基本情况以外,还应考虑整数部分首位的情况。
1.整数部分如果大于零,则首位不能为0(如02,005,088等不合法)
2.整数部分等于0,则整数部分只有一位数0.

function isUSD(str) {
  var re = /^\$([1-9]\d{0,2}(,\d{3})*|0)(\.\d{2})?$/;
  return re.test(str);
}

发表于 2017-04-11 17:37:26 回复(2)
function isUSD(str) {
    let reg = /^\$[1-9]\d{0,2}(,\d{3})*(\.\d{2})?$/
    return reg.test(str)
}
首位不能为0,可以没有小数部分
发表于 2020-05-05 09:24:08 回复(0)
function isUSD(str) {
    return /^\$(?:0|[1-9]\d{0,2})(,\d{3})*(\.\d{2})?$/.test(str);
}
  1. 以$开头,阿拉伯数字结尾
  2. 要考虑整数位首位为0的情况
  3. 选择要组合起来,因为后面还有匹配规则。
编辑于 2019-11-04 20:58:36 回复(0)
function isUSD(str) {
	var re = /^\$[\d]{1,3}(,[\d]{3})*(\.[\d]{2})?$/;
	return re.test(str);
}

发表于 2017-05-15 22:53:47 回复(0)
function isUSD(str) {
	return (/^\$(([1-9]\d{0,2}(,\d{3})*)|0)(\.\d{2})?$/).test(str);
} 
有点难

发表于 2017-02-16 23:57:28 回复(0)
首位可以零,或者首位不能为零,我看很多人都没考虑首位不能为零的问题。

function isUSD(str) {
    var re = /^\$([1-9]\d{0,2}(,\d{3})*|0)(\.\d{2})?$/;
    return re.test(str);
}

发表于 2016-03-24 15:28:11 回复(8)
function isUSD(str) {
    var patt1 = /^\$\d{1,3}(\,\d{3})*(\.\d{2})?$/;
    return patt1.test(str);
}
^\$:以$符号开头
\d{1,3}:至少1位至多3位数字
(\,\d{3})*:0个或多个,+3位数字
(\.\d{2})?:0个或1个.+2位数字
$:结尾
发表于 2016-05-11 09:29:15 回复(6)
function isUSD(str) {
 var reg = /^\$(([1-9]\d{0,2}(,\d{3})*)|0)(\.\d{2})?$/;
    return reg.test(str);
}
要多考虑整数部分只为0的情况,比如$0.23,所以|0很有必要

编辑于 2016-08-05 00:53:25 回复(5)
function isUSD(str) {
    const regex = /^\$\d{1,3}(,\d{3})*(\.\d{2})?$/;
    return regex.test(str);
}

发表于 2023-06-06 15:41:26 回复(0)
function isUSD(str) {
  const reg = /^\$(?!,)(\d{1,3})?(,\d{3})*(\.\d{2})?$/
  return reg.test(str)
}
发表于 2023-06-29 12:07:54 回复(0)
    function isUSD(str) {
  let reg=/^\$\d{1,3}(,\d{3})*(\.\d{2})?$/
  return reg.test(str)
}
发表于 2023-06-27 09:47:08 回复(0)
function isUSD(str) {
  return /^\$[1-9][0-9]{0,2}(\,\d{3})*(\.\d{2})?$/.test(str)
}

发表于 2023-03-11 23:03:43 回复(0)
function isUSD(str) {
    return str[0] === "$" && str.indexOf(".") == str.lastIndexOf(".") &&str[1]!="," && (str.substring(1).split(".")[0].split(",").every((item, i) => {
        if (i == 0 && item.length < 4) return true
        return item.length == 3
    }) || str.substring(1).split(".")[0].length == 3)&&((str.indexOf('.')!=-1&& str.substring(1).split(".")[1] && str.substring(1).split(".")[1].length == 2)||(str.indexOf('.')==-1))
}
发表于 2023-01-17 23:56:42 回复(0)
function isUSD (str) {
      return /^\$((0\.)|[1-9])\d{0,2}\.?(\d{2})?(,?\d{3})*(,?\d{3}\.?\d{2})?$/g.test(str)
 }

发表于 2022-12-06 21:21:05 回复(0)
function isUSD(str) {
            let int,parse,exp=/[^\d\.,$]/g
            if (!str.includes('$')||str.slice(0,1)!=='$') return false
            if(str.slice(1,2)===',')return false
            if(exp.test(str))return false
            if (str.includes('.')) {
                int = str.split('.')[0].split('').reverse()
                parse = str.split('.')[1]
                if (parse.length !== 2) return false
            }else{
                int=str.split('').reverse()
             }
             
           if (int.length > 4) {
                return int.every((item, index) => {
                    let i=int.findIndex(item=>item==='$')
                    if (((index - 3) % 4 === 0)) {
                        return item === ","||"$"
                    }
                    return item!==","
                })
            }
            return true
        }
发表于 2022-09-25 19:16:07 回复(0)
function isUSD(str) {
    let reg1=/^\$(\d){1,2}(,\d{3})*$/
    let reg2=/^\$(\d{3})(,\d{3})*$/
    if(str.indexOf('.')!=-1&&str.indexOf('.')==str.length-3){
        //小数符合要求
        str=str.slice(0,str.indexOf('.'))
        if(reg1.test(str)||reg2.test(str))
            return true;
        else return false;
    }
    else if(str.indexOf('.')==-1){
        //整数
        if(reg1.test(str)||reg2.test(str))
            return true;
        else return false;
    }
    else {
        return false;
    }
}
发表于 2022-09-19 18:55:09 回复(0)

问题信息

难度:
142条回答 21034浏览

热门推荐

通过挑战的用户

查看代码