用点号(.)替换逗号(,)RegEx php

13

我正在尝试运行这段代码,但是出现了以下错误:No ending delimiter '/' found

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

我不确定正则表达式的验证方法。


4
为什么你需要用正则表达式来完成这个任务? - BoltClock
5个回答

73

对于只替换一个字符来说,正则表达式有些过度了。为什么不直接这样做呢?

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

3
确实。当螺丝刀足够时,为什么要使用具有12,000个附件的电钻呢? - Bob_Gneu
1
@Midas:在SO上,基本答案似乎成为了获得过多赞数的趋势。https://dev59.com/qW855IYBdhLWcg3w6Y1q#4080268,而我的大部分高赞答案都是例子。 - BoltClock
在这个例子中,str_replace() 的执行速度比 preg_replace() 快了4倍多,所以 str_replace() 显然是最佳选择。 - Rob Raisch

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

但是,你并不真正想匹配一个模式,而是一个常量字符串,所以只需使用str_replace()


3
您可以简单地使用。
str_replace(',','.',$form);

1

我不理解你的参数 - 我不确定字符串中应该包含什么和不应该包含什么。但是对于 preg_replace,搜索模式应该是一个字符串,并且这个字符串的开头和结尾也要有定界符(通常是“/”)。我认为,在搜索字符串已经在一个字符串内部时需要斜杠是多余的,但这就是它的工作方式。

第二个参数应该是一个只包含句点的字符串。这会得到:

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

其他人说用 str_replace 把一个字符替换成另一个字符没问题,但如果你想要更复杂的替换,preg_replace 也是合理的。


0

你字符串中的'/'被用作正则表达式的起始定界符,因此需要对其进行转义。正确的代码应该是:

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

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

编辑

啊,我现在明白了,这一行应该写成:

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

我感到困惑因为你的例子中第一个逗号应该是“.”来连接字符串。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接