2

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

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

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

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

请建议对我当前的正则表达式进行一些更改。

谢谢约翰

找到解决方案::--

^\$?([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}))\)$
4

2 回答 2

1

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

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

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

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

这是验证货币 (USD) 的非基于正则表达式的解决方案:

$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"
于 2013-07-24T07:23:08.220 回答
0

你可以使用这个模式:

\$?(?:\.\d+|(?:\d{4,}|\d{1,3}(?:,\d{3})*)(?:\.\d+)?)
于 2013-07-25T00:46:25.243 回答