2011-06-14 64 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將是合理的。