regex可以捕获30万美元以下的任何货币

时间:2019-06-07 19:51:55

标签: regex pcre

我要求在币种字段中标识300,000以下的任何值。我创建了一个正则表达式,可以对100万以下的任何数字执行此操作,但是我需要将其减少到299,999.99美元。

下面列出了100万个代码。

^\$?\d{0,3}?\d{0,2},?\d{0,3}(\.(\d{0,2}))?$

3 个答案:

答案 0 :(得分:1)

在这里,Facebook\WebDriver\Exception\UnexpectedJavascriptException: javascript error: Cannot read property 'click' of undefined

$300,000.00 - $1,000,000.00

可读版本

(?<!\S)\$?(3\d{2},?\d{3}|[4-9]\d{2},?\d{3}|10{6}|1,?000,?000)(\.\d{0,2})?(?!\S)

答案 1 :(得分:0)

在这里,正则表达式不是最佳选择。

为说明这一点,我将使用您为100万美元案例发布的正则表达式。在我看来,您正在尝试适应各种条件,包括:

$10      vs.  $10.00
$100     vs.  100
$100     vs.  $10000
$10,000  vs.  $100,000
etc.

但是您这样做的方式允许发生以下情况:

$10000000.00

因为:

$            matches  ^\$?
100          matches  \d{0,3}?
00           matches  \d{0,2}
[no comma ]  matches  ,?
000          matches  \d{0,3}
.00          matches  (\.(\d{0,2}))?$

(已通过https://regex101.com/测试)

以不同的方式说,您尝试匹配诸如缺少小数逗号和存在逗号的大数之类的东西,以及可能以小号,中号和大号出现的各种数字分组会导致正则表达式匹配的数字远远超过100万美元。

尽管正则表达式具有多种用途,而现代正则表达式引擎非常强大,但是要执行您要执行的操作的健壮正则表达式将非常麻烦,难以阅读且难以维护。

它也足够复杂,以至于可以显示正则表达式可以正确地视为编程语言的方式。

但是最重要的是,任何正则表达式都在周围的编程语言的上下文中使用,那么为什么不仅仅使用编程语言本身的功能呢?可能需要花费更多的打字时间,但可能会花费更少的时间,并且结果的编写,阅读和维护更加容易。

答案 2 :(得分:0)

您可以使用以下正则表达式: ^\$[0-2]?[0-9]{0,2},?[0-9]{0,3}(\.[0-9]+)?$

See the explanation on regex101...

enter image description here

Here you can visualize your regular expression...