2011-06-14 63 views
6

我试图此代码,但我得到这个错误():No ending delimiter '/' found替换逗号(,)与点正则表达式PHP

$form = " 2000,50"; 
$salary = preg_replace('/',', '.'/', $form); // No ending delimiter '/' found 
echo $salary; 

我不知道正则表达式验证。

+4

为什么你需要一个正则表达式呢? – BoltClock 2011-06-14 16:43:06

回答

52

正则表达式替换只是一个单一的字符矫枉过正。为什么不只是这样做呢?

str_replace(',', '.', $form); 
+2

确实。为什么在螺丝刀满足的情况下使用带有12,000个附件的电钻? – 2011-06-14 16:46:47

+1

@Midas:在SO上接收不成比例的upvotes似乎是一个基本答案的趋势。 http://stackoverflow.com/questions/4080265/what-does-this-css-do/4080268#4080268和我最热门的答案是例子。 – BoltClock 2011-06-14 16:55:26

+0

在这种情况下,str_replace()的执行速度比preg_replace()快4倍,所以str_replace()显然是最好的选择。 – 2011-06-14 18:32:31

3

您可以简单地使用

str_replace(',','.',$form); 
5
$salary = preg_replace('/,/', '.', $form); 

但是,是的,你真的不想要匹配模式而是一个字符串,它是不变,所以只需使用str_replace()

0

字符串中的'/'用作开始正则表达式分隔符,因此您需要将其转义。正确的行应为:

$salary = preg_replace('\\/',', '.'/', $form); 

我也很好奇为什么第二个参数是','。 '/' 而不是 ', /'。

编辑

啊,我现在看到,该行应为:

$salary = preg_replace('/,/', '.', $form); 

我很困惑,因为在你的例子中第一个逗号应该是“”连接字符串。

1

我不明白你的参数 - 我不知道什么是应该在字符串中,什么不是。但对于preg_replace,搜索模式应该是一个字符串,并且字符串也以分隔符开头和结尾(通常为'/')。我认为当搜索字符串已经在字符串中时,需要缩减搜索字符串,但这就是它的工作原理。

第二个参数应该是一个包含句号的字符串,而不是别的。这给出:

$ salary = preg_replace('/,/','。',$ form);

其他人是正确的,str_replace将罚款将一个字符转换成另一个,但如果你想要更换更复杂preg_replace将是合理的。