什么是USD

USD是美元数额的一种表示格式,该格式要求字符串符合以下特征:

  1. 以 $ 开始
  2. 整数部分,从个位起,满 3 个数字用 , 分隔
  3. 如果为小数,则小数部分长度为 2

那么如何用正则表达式来匹配USD格式的字符串呢?
咱们先揭晓答案,然后慢慢解释

/^\$(([1-9]\d{0,2}(,\d{3})*)|0)(\.\d{2})?$/

第一部分^\$[1-9]\d{0,2}

要求以美元符号开头:

  • $字符在正则里本身有含义,它需要转义
  • 以某字符串开头,用符号^表示

n$:匹配任何结尾为 n 的字符串
^n:匹配任何开头为 n 的字符串

数额的第一组数字由0-3位数字组成,且第一位不能为零(从左向右看):

  • []表示取值的枚举或者取值的范围,[1-9]匹配除0之外的数字
  • \d是数字的元字符,等价于[0-9]
  • {0,2}表示前面的匹配规则重复0-2次

[x-y]:查找任何从 x 至 y 的数字
\d:查找数字
n{X,Y}: X 和 Y 为正整数。前面的模式 n 连续出现至少 X 次,至多 Y 次时匹配,Y省略时表示没有上限

第二部分(,\d{3})*

数额除第一组和小数部分外后续的数字每三位为一组,组于组以,分隔:

  • 逗号,不存在歧义,转义不转义随意
  • {3}表示前面的匹配规则必须重复3次
  • *表示重复前面的匹配规则至少0次,等价于{0,}

n{X}:X 是一个正整数,前面的模式 n 连续出现至少 X 次时匹配
n*:匹配任何包含零个或多个 n 的字符串

第三部分(\.\d{2})?$

小数部分必须为两位,小数部分可有可无:

  • 符号.在正则里有含义,它需要转义
  • 综合前面所讲,\d{2}表示匹配两位任意数字
  • 符号?表示该匹配规则可有可无

.:单个字符的占位符(换行和行结束符),比如在 “That’s hot!” 里 /h.t/g 匹配 “hat” 和 “hot”
n?:匹配任何包含零个或一个 n 的字符串

当数额整数时必须以整数结尾,当数额小数时必须以小数结尾:

  • 符号$表示以该匹配规则结尾,如 \d{2}$ 匹配 “abc12” 为true,匹配 “ab12c” 为false

n$:匹配任何结尾为 n 的字符串(这里可是在本博文第二次出现了,记牢了嗷)

第四部分(([1-9]\d{0,2}(,\d{3})*)|0)

补充第一部分的一个边界情况,当数额小于1时,整数部分(同时也是第一位且唯一一位)可以为0
比如:$0.12、$0.33 这种也需要符合匹配。

x|y:匹配x或y。例如,“z|food”能匹配“z”或“food”,“(z|f)ood”则匹配“zood”或“food”。

综合四个部分,得出答案为 /^$(([1-9]\d{0,2}(,\d{3})*)|0)(.\d{2})?$/

console.log(isUSD('$100,023,032.03'));   // true
console.log(isUSD('$10,023,032.03'));    // true
console.log(isUSD('$1,023,032.03'));     // true
console.log(isUSD('$0.03'));           // true   这种情况千万不要漏掉
console.log(isUSD('$1,023,032.033'));    // false
console.log(isUSD('$1,023,032.3'));      // falsefunction isUSD(str) {return /^\$(([1-9]\d{0,2}(,\d{3})*)|0)(\.\d{2})?$/.test(str);
}

小小总结,希望对大家有所帮助!一起加油~

正则表达式匹配USD格式相关推荐

  1. oracle 正则表达式匹配日期格式,利用正则表达式找出不合符的日期

    很多时候我们的日期可能存放的是字符串类型,在插入的时候也很有可能插入的日期格式不正确, 因此我们需要找出这些不合符的日期格式,来此来修正.当然可以使用TO_DATE函数一个一个的转换来找出不合法的日期 ...

  2. 判断是否为USD格式

    题目描述 给定字符串 str,检查其是否符合美元书写格式 1.以 $ 开始 2.整数部分,从个位起,满 3 个数字用 , 分隔 3.如果为小数,则小数部分长度为 2 4.正确的格式如:$1,023,0 ...

  3. Python中正则表达式用法 重点格式以这个为准_首看_各种问题

    20210811 https://www.jb51.net/article/101258.htm 一.惰性模式的概念: 此模式和贪婪模式恰好相反,它尽可能少的匹配字符以满足正则表达式即可,例如: va ...

  4. python正则匹配ip地址_Python正则表达式匹配和提取IP地址

    Linux No.1 IPv4 下面是IPv4的IP正则匹配实例: 简单的匹配给定的字符串是否是ip地址 import re if re.match(r"^(?:[0-9]{1,3}.){3 ...

  5. Notepad++中用正则表达式匹配中文

    通常正则表达式匹配中文可以利用Unicode的特点,使用[\u4e00-\u9fa5]匹配.但在Notepad++中不能正常使用. 解决方法是,首先将编码转换成Unicode(菜单->格式-&g ...

  6. python re正则提取ip地址_Python正则表达式匹配和提取IP地址

    No.1 IPv4 下面是IPv4的IP正则匹配实例: 简单的匹配给定的字符串是否是ip地址 import re if re.match(r"^(?:[0-9]{1,3}\.){3}[0-9 ...

  7. 【转】正则表达式 匹配中文,英文字母和数字及_的写法!同时控制长度

    [转]正则表达式 匹配中文,英文字母和数字及_的写法!同时控制长度 using System.Text.RegularExpressions; 匹配中文:[\u4e00-\u9fa5] 英文字母:[a ...

  8. java 匹配任意字符_正则表达式匹配任意字符(包括换行符)

    正则表达式中,"."(点符号)匹配的是除了换行符"\n"以外的所有字符.但有时候我们需要匹配包括换行符在内的字符,经过一番搜索,发现了几种正则表达式匹配任意字符 ...

  9. python re正则提取ip地址_python 正则表达式匹配IP地址

    一.实验环境 1.Windows7x64_SP1 2.anaconda2.5.0 + python2.7(anaconda集成,不需单独安装) 3.pyinstaller3.0 二.实验目的 从tex ...

最新文章

  1. vue 组件之间的传值
  2. Python学习笔记:函数
  3. python输入一组数字存到列表_Python如何使用输入传递多个值并将它们存储在一个列表中(简单版本),python,怎么,input,传入,储存,到...
  4. 图数据库与关系数据库的实验对比——意大利商会 InfoCamere 案例
  5. 电脑位数怎么看_看完了这篇文章你就知道怎么选电脑了...
  6. mac下hive-1.2.2-src版本的编译
  7. DevExpress控件介绍
  8. 【SRH】------node创建简单的服务器
  9. php怎么重命名文件,phpstorm如何进行文件或者文件夹重命名
  10. 机器学习- 吴恩达Andrew Ng Week9 知识总结 Anomaly Detection
  11. oracle spatial 数据导入_Oracle Spatial导入shp数据
  12. 智能暖风机——7.LED驱动和断电记忆功能
  13. 怎么恢复苹果手机通讯录
  14. oracle语句update使用case when连续更新
  15. 【维修】如何成功做网线?
  16. 浅谈char类型范围
  17. PDF编辑管理工具Cisdem PDFMaster Mac
  18. 串口转以太网模块:WIZ108SR(用户手册)
  19. 2022第二届网刃杯网络安全大赛
  20. 华为ACL原理及配置

热门文章

  1. T1072 鸡尾酒疗法(信息学一本通C++)
  2. [PHP]进阶教程:将wav文件转换成图像文件并在页面中显示
  3. 告诉你,如何成就DBA职业生涯
  4. 口布杯花的60种叠法_杯花折叠方法
  5. docker重启后启动失败Failed to start Docker Application Container Engine.
  6. 光伏系统MPPT、恒功率控制切换MATLAB仿真
  7. 深入理解计算机系统(CSAPP) attack-lab详解
  8. 腾讯音乐 知乎 微信公众账户 搜狗
  9. c语言程序设计教程上机报告,华中科技大学标准C语言程序设计上机试题、答案及报告格式...
  10. C盘被$ESTBAK$占用100G