如何在以下条件下创建正则表达式


How to create regex with following conditions?

我有这个正则表达式,用于在JavaScript中使用正则表达式进行美元验证。

/^'$?'d{1,3}(,?'d{3})*'.?('d+)?$/

但这不适用大于0(美元符号可选)和有效金额的$.01。要求是-

1.$2000
2.2000
3.$2000.00
4.$2,000
5.2000.00
6.2,000.00
7.$.04

请建议对我当前的regexp进行一些更改。

谢谢约翰·

找到的解决方案::--

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

以下正则表达式应该适用于您:

^'$?(?=.)(?:'d{1,3})?(?:,?'d{3})*(?:'.'d+)?$

现场演示:http://www.rubular.com/r/0qQBwTRMOl

只需记住使点之前的数字可选匹配,这强制使用正向前瞻,以确保在可选$符号之后至少有一个数字。

这里有一个非基于正则表达式的解决方案来验证货币(美元):

$fmt = new NumberFormatter( 'en-US', NumberFormatter::CURRENCY );
#$num = "1.234.567,89 $";
$num = "$.04";
var_dump($fmt->parseCurrency($num, $curr)); // returns float value: float(0.04)
var_dump($curr); // returns string representing currency: string(3) "USD"

您可以使用以下模式:

'$?(?:'.'d+|(?:'d{4,}|'d{1,3}(?:,'d{3})*)(?:'.'d+)?)