我确定这是一个重复的,但我无法通过搜索找到答案。
这是我的代码
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
,但也将匹配和替换fey
、fir
、fox
、f12
、f )
等。
使用 preg_replace()!
您可以通过这种方式删除特定字符
$foo = preg_replace('/[yourcharacters]/', '', $foo);
你也可以通过添加^(参见正则表达式表)来反其道而行之(删除除确定字符之外的所有字符)。
$foo = preg_replace('/[^theonlyallowedcharacters]/', '', $foo);
我认为您需要为正则表达式添加\为特殊字符。
请替换为此代码,
['',(,),/,|,*,-,#,\]
而不是你的,
[' ',-,(,),/,|,*,-,#,]
我希望它可能会有所帮助。