逃避某些字符并不起作用

时间:2017-06-29 09:45:42

标签: php regex string escaping

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

这是我的代码

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

这是有效的。我想要的是:

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

一旦我添加#\,它就会失败,并且逃避它们似乎无法正常工作。是否有不同的方式逃避它们?

虽然它似乎有效但似乎并没有取代最初的空间。这可能是我问题的根源吗?

3 个答案:

答案 0 :(得分:3)

您要删除空格,-()*-|,{{1} }以及字符串中的/\符号。

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

#

或者,您可以使用preg_replace这样的正则表达式:

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

请参阅PHP demo

正则表达式详情

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

<强> The difference between string replace and preg replace

'~[- ()*|/\\\\#]~u'替换特定匹配的文字字符串,例如str_replace只匹配并替换:foo

foo将使用正则表达式执行替换,例如preg_replace将匹配并替换/f.{2}/,但foofey,{{1} }},firfox等。

答案 1 :(得分:2)

使用preg_replace()!

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

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

你也可以通过添加^(参见Regex-Tables)来反过来(删除除了确定的字符以外的所有字符)。

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

答案 2 :(得分:0)

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

请替换为此代码,

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

而不是你的,

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

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