常用金额正则表达式详解


发布日期 : 2024-11-26 08:21:15 UTC

访问量: 10 次浏览

什么是金额正则表达式

在日常的开发中,经常会需要验证和处理金额的数据。正则表达式是一种强大的工具,通过定义一些规则,可以对文本进行匹配和提取操作。
金额正则表达式是一种基于正则表达式的规则,用来识别和验证金额的数据格式。常见的金额格式包括人民币、美元、欧元等,通常都是带小数点的数字。
有了金额正则表达式,我们可以方便地判断和处理这些数据,提高开发效率。

如何编写金额正则表达式

金额正则表达式的编写比较灵活,需要结合实际应用场景和需求进行定义。
下面,我们将介绍一些常用的金额正则表达式模式,以便大家参考和使用。

人民币金额正则表达式

人民币金额通常为小数点后两位的数字,格式为大写或小写字母“元”和“角分”。
下面是一个常见的人民币金额正则表达式示例:

^[1-9]\d*(((,\d{3}){1})?(\.\d{1,2})?)$
  • ^ :匹配字符串的开头
  • [1-9] :表示第一位数字为1-9
  • \d* :表示0个或多个数字
  • (((,\d{3}){1})? :表示1个逗号和3位数字的组合,可以出现1次或者不出现
  • (\.\d{1,2})? :表示小数点后1-2个数字,可以出现1次或者不出现
  • $ :匹配字符串的结尾

此正则表达式可匹配的金额格式举例:

– 0.00

– 0.1

– 0.10

– 2

– 2.2

– 2.22

– 1000

– 1000.00

– 10,000.00

美元金额正则表达式

美元金额通常以美元符号$开头,小数点后两位的数字,可以加上逗号分隔符。下面是一个常见的美元金额正则表达式示例:

^\?[0-9]{1,3}(,?[0-9]{3})*(\.[0-9]{2})?
  • ^ :匹配字符串的开头
  • \$? :表示美元符号$可以出现1次或者不出现
  • [0-9]{1,3} :表示1-3位数字
  • (,?[0-9]{3})* :表示0个或多个逗号和3位数字的组合
  • (\.[0-9]{2})? :表示小数点和两位数字的组合,可以出现1次或者不出现
  • $ :匹配字符串的结尾

此正则表达式可匹配的金额格式举例:

$0.00
$0.1
$0.10
$2
$2.2
$2.22
$2,000
$2,000.00
$10,000.00

欧元金额正则表达式

欧元金额通常以欧元符号€开头,小数点后两位的数字,可以加上逗号分隔符。
下面是一个常见的欧元金额正则表达式示例:

^€?\d{1,3}(,\d{3})*(\.\d{2})?$
  • ^ :匹配字符串的开头
  • €? :表示欧元符号€可以出现1次或者不出现
  • \d{1,3} :表示1-3位数字
  • (,\d{3})* :表示0个或多个逗号和3位数字的组合
  • (\.\d{2})? :表示小数点和两位数字的组合,可以出现1次或者不出现
  • $ :匹配字符串的结尾

此正则表达式可匹配的金额格式举例:

€0.00
€0.1
€0.10
€2
€2.2
€2.22
€2,000
€2,000.00
€10,000.00

金额正则表达式的应用

金额正则表达式在实际应用中非常广泛,常用于以下场景:

数据验证

金额正则表达式可以用于验证用户输入的金额是否符合规范。
比如,当用户在表单中输入金额时,我们可以对输入的数据进行格式校验,判断是否为一个合法的金额数值。

// 校验人民币金额
const regex = /^[1-9]\d*(((,\d{3}){1})?(\.\d{1,2})?)/
const value = '10000.00'
if (regex.test(value)) {
console.log('输入金额合法')
} else {
console.log('请输入正确的金额')
}

// 校验美元金额
const regex = /^\$?[0-9]{1,3}(,?[0-9]{3})*(\.[0-9]{2})?/
const value = '$10,000.00'
if (regex.test(value)) {
console.log('输入金额合法')
} else {
console.log('请输入正确的金额')
}

数据处理

金额正则表达式也可以用于处理数据。比如,在进行财务报表的数据统计时,我们需要对金额进行格式化操作,比如加上千分位分隔符或者保留特定位数的小数。

// 格式化人民币金额
const regex = /^(\d+)((\.\d{1,2})|)/
const value = '100000.20'
const matched = value.match(regex)
const integer = matched[1].replace(/\d{1,3}(?=(\d{3})+)/g, '&,') // 加上千分位分隔符
const decimal = matched[2] || '.00'
const formatted = `¥{integer}{decimal}`
console.log(formatted) // ¥100,000.20

// 格式化美元金额
const regex = /^(\$?)((?:\d+,)*\d+\.\d{2})/
const value = '10,000.00'
const matched = value.match(regex)
const symbol = matched[1] || ''
const number = matched[2].replace(/\d(?=(\d{3})+\.)/g, '&,') // 加上千分位分隔符
const formatted = `{symbol}{number}`
console.log(formatted) // $10,000.00

结论

金额正则表达式是一种方便实用的工具,通过定义规则,可以对金额数据进行验证和处理。
在实际开发中,我们可以根据需求选择合适的正则表达式模式,用于验证和处理不同格式的金额数据。