2017-06-29 92 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