我有这个正则表达式,用于在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+)?)