如何使用以下条件创建正则表达式?

时间:2013-07-24 07:14:26

标签: php regex

我使用JavaScript中的regexp验证美元验证的正则表达式。

/^\$?\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

请在我目前的正则表达式中提出一些更改。

由于 约翰

FOUND SOLUTION :: -

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

2 个答案:

答案 0 :(得分:1)

以下正则表达式适合您:

^\$?(?=.)(?:\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"

答案 1 :(得分:0)

你可以使用这种模式:

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