2017-06-29 88 views
3

我確定這是重複的,但我無法通過搜索找到答案。轉義某些字符不起作用

這裏是我的代碼

str_replace([' ',-,\(,\),\*,-,\|,\/], '', $params['telephone']), '0'

和工程。我想這是是:

str_replace([' ',-,\(,\),/,|,\*,-,\#,\], '', $params['telephone']), '0'

只要我在#\添加失敗,並逃避他們似乎並沒有工作。有沒有不同的方式來逃避他們?

雖然它看起來有效,但它似乎並沒有取代最初的空間。這可能是我的問題的根源嗎?

+3

如何能第一線工作的?只有一個搜索字符串(空格)被引用。這是你的真實代碼嗎? – jeroen

回答

3

要刪除的空間,從字符串-()*-|/\#符號。

你需要將這些字符數組傳遞給str_replace

$arr = [ '-', '(', ')', '*', '-', '|', '/', '\\', '#']; 
$result = str_replace($arr, '', $s); 

或者,您可以使用正則表達式與preg_replace這樣的:

$res = preg_replace('~[-()*|/\\\\#]~', '', $s); 

PHP demo

正則表達式的細節

  • ~是一個正則表達式的分隔符,所有preg_功能
  • -必須在字符類的開始/結束放,或者逃脫如果放在其他地方需要,以匹配文字-
  • \符號必須與2個文字\ s匹配,這意味着需要4個反斜槓來匹配單個文字反斜槓
  • 在字符類,*()|(和+?.,太)輸有特殊的地位,並不需要進行轉義
  • 如果您使用Unicode字符串的工作,之後添加u修改最後的~正則表達式分隔符:'~[-()*|/\\\\#]~u'

The difference between string replace and preg replace

str_replace代替文字字符串的發生的特定事件,例如foo將只匹配和替換:foo

preg_replace將使用正則表達式,比如/f.{2}/將匹配和替換foo進行更換,但也feyfirfoxf12f)

+1

真棒答案謝謝。 – Eoin

0

我認爲你需要爲特殊字符添加\用於你的正則表達式。

請更換與此代碼,

['',\(,\),\/,\|,\*,-,\#,\\] 

,而不是您的,

[' ',-,\(,\),/,|,\*,-,\#,\] 

我希望它可以幫助。

+0

我認爲這是不正確的,我使用了特殊字符,並通過試驗和錯誤以及使用PHP Storm進行驗證來移除那些不必要的字符。此外,我需要在那裏的空間:) – Eoin

2

使用preg_replace()!

您可以刪除特定字符這樣

$foo = preg_replace('/[yourcharacters]/', '', $foo); 

而且你還可以通過添加^(見正則表達式-表)做它周圍的其他方法(刪除所有,但確定的字符)。

$foo = preg_replace('/[^theonlyallowedcharacters]/', '', $foo); 
+0

謝謝你,只有允許部分有用的意見。也許我會做得更好,因爲我只想要數字。感謝您花時間回答。 – Eoin

+0

你能幫我理解爲什麼當另一個答案有'〜'的時候,你前後加了'/'? – Eoin

+1

不客氣!它只是表示正則表達式的開始和結束。如果您只需要Numbers,並使用Regex過濾輸入,則可以使用/ [^ 0-9] /。快樂編程:) – Bernhard