php Dollar amount Regular Expression
I am have completed javascript validation of a form开发者_如何学编程 using Regular Expressions and am now working on redundant verification server-side using PHP.
I have copied this regular expression from my jscript code that finds dollar values, and reformed it to a PHP friendly format:
/\$?((\d{1,3}(,\d{3})*)|(\d+))(\.\d{2})?$/
Specifically:
if (preg_match("/\$?((\d{1,3}(,\d{3})*)|(\d+))(\.\d{2})?$/", $_POST["cost"])){}
While the expression works great in javascript I get :
Warning: preg_match() [function.preg-match]: Compilation failed: nothing to repeat at offset 1
when I run it in PHP. Anyone have a clue why this error is coming up?
you have to double escape the $.
if (preg_match("/\\\$?((\d{1,3}(,\d{3})*)|(\d+))(\.\d{2})?$/", $_POST["cost"])){}
just putting \$ will have php escape the $ from starting a variable. You also have to add another escaped \ (\\) in front. Or you could just use single quotes so php doesn't interpret the $ as the start of a variable.
From PHP documentation:
Do not use preg_match() if you only want to check if one string is contained in another string. Use strpos() or strstr() instead as they will be faster.
Try this:
if (preg_match('/\$?((\d{1,3}(,\d{3})*)|(\d+))(\.\d{2})?$/', $_POST["cost"])){}
The dollar sign between " are considered as the start of a variable. Compare with these two code snippets:
1:
$var = "hello";
echo "$var world";
2:
$var = "hello";
echo '$var world';
精彩评论