2010-05-12 385 views
1

我已完成使用正则表达式的表单的JavaScript验证,现在正在使用PHP进行冗余验证服务器端。php美元金额正则表达式

我抄从我的JScript代码,发现美元价值这个正则表达式,并将其改造为PHP友好的格式:

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

具体做法是:

if (preg_match("/\$?((\d{1,3}(,\d{3})*)|(\d+))(\.\d{2})?$/", $_POST["cost"])){} 

虽然表达的伟大工程javascript我得到:

Warning: preg_match() [function.preg-match]: Compilation failed: nothing to repeat at offset 1 

当我在PHP中运行它。任何人都有线索为什么会出现这个错误?

+0

错过了$作为一对夫妇回复指出下面 \\\ $或使用单引号括起正则表达式,谢谢你们! – Thildemar 2010-05-12 21:46:32

回答

2

你必须双倍转义$。

if (preg_match("/\\\$?((\d{1,3}(,\d{3})*)|(\d+))(\.\d{2})?$/", $_POST["cost"])){}

只是把\ $将让PHP从开始一个变量逃避$。您还必须在前面添加另一个转义的\(\\)。或者你可以使用单引号,这样PHP不会将$解释为变量的开始。

+0

工程很好,我讨厌交换语言和忘记所有逃脱的字符=(。谢谢! – Thildemar 2010-05-12 21:42:57

+0

这将无法匹配数字,如2000(将给200) – afilina 2015-07-10 18:40:09

+0

@afilina如果它,那是错误的原来的帖子,因为我刚刚向他们展示了如何修复他们的表达以在php中工作。 – 2015-07-10 18:53:19

1

从PHP文件:

不要使用preg_match()如果 只想检查一个字符串是否包含在另一个字符串 。使用 strpos()strstr()而不是他们的 会更快。

+0

这有什么关系? OP正在做一个正则表达式匹配,而'preg_ *'函数是你如何做的。 – 2010-05-12 21:32:40

+0

是的,我测试格式不是字符串,或者我会避免像瘟疫一样的正则表达式。 – Thildemar 2010-05-12 21:44:56

1

试试这个:

if (preg_match('/\$?((\d{1,3}(,\d{3})*)|(\d+))(\.\d{2})?$/', $_POST["cost"])){} 

“被认为是一个变量的开始之间的美元符号与这两个代码片段比较:

1:

$var = "hello"; 
echo "$var world"; 

2:

$var = "hello"; 
echo '$var world'; 
+0

也是如此,谢谢! – Thildemar 2010-05-12 21:44:10