转义某些字符不起作用



我确定这是一个重复的,但我无法通过搜索找到答案。

这是我的代码

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

这行得通。 我想要的是:

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

一旦我添加#它就会失败,并且转义它们似乎不起作用。 有没有其他方法可以逃避它们?

尽管它看起来有效,但它似乎并没有取代最初的空间。 这可能是我问题的根源吗?

您要从字符串中删除空格、-()*-|/以及#符号。

您需要将这些字符的数组传递给str_replace

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

或者,您可以使用如下所示preg_replace的正则表达式:

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

请参阅 PHP 演示。

正则表达式详细信息

  • ~是一个正则表达式分隔符,所有preg_函数都需要
  • -必须放在字符类的开头/结尾,或者如果放在其他任何位置,则必须进行转义,以匹配文字-
  • 符号必须与 2 个文字s 匹配,这意味着需要 4 个反斜杠来匹配单个文字反斜杠
  • 在字符类中,*()|(以及+?.)在那里失去特殊地位,不需要转义
  • 如果使用 Unicode 字符串,请在最后一个~正则表达式分隔符之后添加u修饰符:'~[- ()*|/\\#]~u'

字符串替换和预置替换的区别

str_replace替换文本字符串的特定匹配项,例如foo只会匹配并替换该字符串:foo.

preg_replace将使用正则表达式执行替换,例如/f.{2}/将匹配和替换foo,但也将匹配和替换feyfirfoxf12f )等。

使用 preg_replace()!

您可以通过这种方式删除特定字符

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

你也可以通过添加^(参见正则表达式表)来反其道而行之(删除除确定字符之外的所有字符)。

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

我认为您需要为正则表达式添加\为特殊字符。

请替换为此代码,

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

而不是你的,

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

我希望它可能会有所帮助。

最新更新