首页 > 试题广场 >

判断是否符合 USD 格式

[编程题]判断是否符合 USD 格式
  • 热度指数:47382 时间限制: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

输入描述:
'$20,933,209.93'


输出描述:
true
示例1

输入

'$20,933,209.93'

输出

true
推荐
本题注意点有必须是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) {
    let before = str.slice(str.indexOf('$')+1,str.indexOf('.') || str.length)
    let after = str.slice(str.indexOf('.')+1) || null
    let str1 = Number(before.replaceAll(',','')).toLocaleString()
    str1 = '$' + (after ? ''+str1+'.'+after : str1)
    return str1 === str
}

这样的写法没毛病啊,为什么运行不通过呢
发表于 2021-07-09 10:32:50 回复(0)
function isUSD(str) {
    return /^\$([1-9]\d{0,2}(,\d{3})*)(\.\d{2})?$/.test(str)
}

正则表达式
/^\$([1-9]\d{0,2}(,\d{3})*)(\.\d{2})?$/

发表于 2021-04-01 15:35:21 回复(0)
function isUSD(str) {
    if(str[0]!='$') return false;
    var arrInt=str.split('$')[1].split('.')[0].split(',');
    var arrFloat=str.split('$')[1].split('.')[1];
    if(arrInt[0].length>3 || arrInt[0]=='') return false;
    if(arrFloat && arrFloat.length!=2) return false;
    for(var i=1;i<arrInt.length;i++){
        if(arrInt[i].length!=3) return false;
    }
    return true;
}

发表于 2021-03-25 16:49:47 回复(0)
/^\$(0|[1-9]\d{0,2}(,\d{3})*)(\.\d{2})?$/
同时满足:
1、$0.12    // true
2、$0,123.45    // false
发表于 2021-03-12 14:44:10 回复(0)
function isUSD(str) {
    return /^\$\d+(,\d{3})*(\.\d{2})?$/.test(str);
}
发表于 2020-08-25 20:33:13 回复(0)
function isUSD(str) {
    const regExp = /^\$([1-9](\d{0,2})(,\d{3})*|0)(\.\d{2})?$/
    return regExp.test(str)
}

发表于 2020-07-27 21:01:57 回复(0)
function isUSD(str) {
    var rex = /^\$([1-9]{1}\d{0,2})(,\d{3})*(\.\d{2})?$/;
    return rex.test(str);
}

发表于 2020-06-30 11:48:05 回复(0)
function isUSD(str) {
    // 最左边的整数部分要么是非0开头的1-3个数字,要么是0。
    return /^\$([1-9]\d{0,2}(,\d{3})*|0)(\.\d{2})?$/.test(str);
}

编辑于 2019-09-07 22:00:48 回复(0)
function isUSD(str) {
    var re1=/^\$[1-9]\d{0,2}(,\d{3})*(\.\d{2})?$/;
    return re1.test(str);

}
发表于 2019-08-07 10:09:54 回复(0)
function isUSD(str) {
    return  /^\$([1-9]\d{0,2}(\,\d{3}){0,})?0?(\.\d{2})?$/.test(str);
}
编辑于 2019-08-19 16:53:13 回复(0)
function isUSD(str) {
    var patt = /^\$[1-9]\d{0,2}(\,\d{3})*(\.\d{2})?$/;
    var n = patt.test(str);
    return n;
}
/*
^开头
$结尾
n{x}     匹配 n 连续出现 x 次
n{x,}    匹配 n 至少连续 x 次
n{x,y}  匹配 n  出现 x 到 y 次
n?   <=> n{0,1}    匹配 n  出现 0 或 1 次
n*    <=> n{0,}    匹配 n  出现 0 或 任意次
n+   <=> n{1,}    匹配 n  出现至少 1 次
*/
发表于 2019-05-15 13:54:43 回复(0)
function isUSD(str) {
    return /^\$\d{1,3}(,\d{3})*(\.\d{2})?$/.test(str)
}
发表于 2018-06-02 17:15:32 回复(0)
//考虑整数部分只有0的情况,且开头不为0.
function isUSD(str) {
    return /^\$(0||[1-9]\d{0,2}(,\d{3})*)(\.\d{2})?$/.test(str);
}
发表于 2017-03-05 13:57:00 回复(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) {
 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)