【问题标题】:Regex to match any currency in page正则表达式匹配页面中的任何货币
【发布时间】:2014-10-18 04:20:33
【问题描述】:

想要获取一个包含文本的字符串并从中提取价格。例如,它应该匹配以下内容:

$1,234.55
$90.99
$90
$100.30
$203

这里的正则表达式帮助会很棒,非常感谢您抽出宝贵时间!这将用于 PHP 或 Javascript。

【问题讨论】:

  • 展示你的尝试。
  • 我们从哪里开始?什么是页面/字符串结构?你对源头有多少控制权?正则表达式是唯一的选择吗?你说任何货币,你是指欧元、比索等吗?

标签: javascript php regex


【解决方案1】:

试试这个/^\$(\d{1,3}(?:,\d{3})*)(?:\.(\d{1,2}))?$/:

"$1,121,234.55".match(/^\$(\d{1,3}(?:,\d{3})*)(?:\.(\d{1,2}))?$/);

(JS代码)

这应该适用于以下模式:

$1
$2.21
$56,231
$12,212.12
$56,823,163.12

第一组 $1 将是完整的美元(例如,没有美分),第二组 $2 将是美分。

详细说明:

  • \$ 是美元符号
  • (\d{1,3}(?:,\d{3})*) 捕获整个美元价值
    • \d{1,3} 是前三位
    • (?:,\d{3})* 前三位数之后的所有内容
  • (?:\.(\d{1,2}))? 捕获美分,它是可选的
    • (?:\. 忽略点
    • (\d{1,2}) 并捕获美分

祝你好运!

【讨论】:

  • 是的,它很复杂,但它会以严格的格式捕获您需要的内容,例如这不会捕获$1234,54,1.1231,但其他人会这样做。
【解决方案2】:

您可以使用下面的正则表达式来匹配所有价格字符串,

\$\d+(?:,\d+)*(?:\.\d+)?

DEMO

说明:

  • \$ 匹配文字 $ 符号。
  • \d+ 匹配一个或多个数字。
  • (?:,\d+)* 匹配逗号和后面的数字零次或多次。
  • (?:\.\d+)? 匹配一个点和后面的数字。 ? 将整个匹配变成可选匹配。

【讨论】:

    【解决方案3】:

    多田:

    \$[\d,]+(?:\.\d+)?

    Here it is in practice

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-12
      • 2012-11-30
      • 1970-01-01
      • 1970-01-01
      • 2022-11-26
      • 2010-10-23
      • 1970-01-01
      相关资源
      最近更新 更多