如何在PHP中从字符串中删除所有非字母数字和非空格字符?

13
我希望从一个字符串中删除所有非字母数字和空格字符。所以我希望空格保留。在下面的函数中,我应该在 [ ] 括号中输入什么来表示空格?
答案是: ``` /[^a-zA-Z0-9 ]/g ```
ereg_replace("[^A-Za-z0-9]", "", $title);

换句话说,有什么符号代表空格,我知道\n代表新行,是否有类似单个空格的符号。

3个回答

31
只需在字符类中加入空格即可:

Just put a plain space into your character class:

[^A-Za-z0-9 ]

对于其他空白字符(制表符、换行符等),请使用\s

您还应该知道,PHP的 POSIX ERE 正则表达式函数已被弃用,并将在 PHP 6 中被移除,取而代之的是 PCRE 正则表达式函数。因此我建议您改用preg_replace

preg_replace("/[^A-Za-z0-9 ]/", "", $title)

我只是想评论一句,为您发布一个正确的示例表达赞扬。上面的绿色勾选答案在技术上是不正确的。应该使用以下代码:$title = preg_replace("/[^A-Za-z0-9 ]/", "", $title) 而不仅仅是 preg_replace("/[^A-Za-z0-9 ]/", "", $title),以明确该方法不会替换变量本身。 - Patrick Caillouet

2

如果你只需要一个字面上的空格,请直接输入一个空格。表示空白字符的组,如制表符和换行符,是\s。


1

被接受的答案没有去除空格。

请考虑以下内容。

$string = 'tD  13827$2099';
$string = preg_replace("/[^A-Za-z0-9 ]/", "", $string);

echo $string;

> tD  138272099

现在,如果我们使用str_replace函数替换空格,就可以得到所需的输出结果。
$string = 'tD  13827$2099';
$string = preg_replace("/[^A-Za-z0-9 ]/", "", $string);

// remove the spaces
$string = str_replace(" ", "", $string);

echo $string;

> tD138272099

4
没错,既然已经有了一个被接受的答案,我可能漏掉了什么。我正在使用 preg_replace('/[\s\W]+/' ,它的效果非常好 - 可以去除非字母数字字符和空格。 - Chords
我知道这很陈旧,但作者不想删除空格。“如何在PHP中从字符串中删除所有非字母数字和非空格字符?”“在下面的函数中,我应该在 [ ] 括号中放什么来表示空格:”尤其要注意:“所以我确实希望空格保留”。 第一行文本中只是缺少了一个“非”字。 - travisnewman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接