我无法弄清楚为什么我的正则表达式会破裂。
我希望它匹配:
$ 100,000
100000
100000(我知道它不匹配,但我想要它)
preg_match("/^\$?(?!0.00)\d{1,3}(,\d{3})*(\.\d\d)?$/", $string);
那么我怎样才能使它与最后一个匹配,为什么我会收到这个错误?这个正则表达式在我的javascript检查中运行良好。
由于
答案 0 :(得分:4)
你需要转义反斜杠才能使其成为字面值,因为它是作为PHP字符串语法的一部分转义美元符号。
preg_match("/^\\\$?(?!0.00)\d{1,3}(,\d{3})*(\.\d\d)?$/", $string);
或使用单引号而不是双引号:
preg_match('/^\$?(?!0.00)\d{1,3}(,\d{3})*(\.\d\d)?$/', $string);
要允许不带逗号的数字,您可以使用替换:
preg_match('/^\$?(?!0.00)(\d{1,3}(,\d{3})*|\d+)(\.\d\d)?$/', $string);
答案 1 :(得分:2)
添加两个斜杠
preg_match("/^\\\$?(?!0.00)\d{1,3}(,\d{3})*(\.\d\d)?$/", $string,$matches);
^^
<?php
$string='$100,000';
preg_match("/^\\\$?(?!0.00)\d{1,3}(,\d{3})*(\.\d\d)?$/", $string,$matches);
print_r($matches);
<强> OUTPUT :
强>
Array
(
[0] => $100,000
[1] => ,000
)
更新:如果您想匹配1
,1000
等数字,请使用下面一项,并注意更改:
preg_match("/^\\\$?(?!0.00)\d{1,3}(\,?\d{3})*(\.\d\d)?$/", $string,$matches);
^ here making the comma optional