判断是否为USD格式

题目描述

给定字符串 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

知识点:

* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 、 "does" 中的 "does" 、 "doxy" 中的 "do" 。? 等价于 {0,1}。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

本题注意点有必须是USD格式,以$开头,数字结尾,$和小数点的转义。

首先,开头必是$,而正则表达式中$表示结尾,需要进行转义,因此开头为^\$

然后$后必然接数字,并且最少一位,最多三位数,可用{m,n}表示,最少m位,最多n位,因此此段为\d{1,3}

接着,后面如还有数,则必然有,分隔,并且后面必有3个数,类似于,XXX的格式会出现0或者n次,因此此段可表示为(,\d{3})*

最后,如有小数部分,则注意对小数点进行转义,此段可表示为(\.\d{2})?

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

}

猜你喜欢

转载自blog.csdn.net/qq_42488433/article/details/83866119