如何去除句子中的非字母、数字和空格字符

4

我有很多句子需要清理所有特殊字符和标点符号(只想保留字母、数字和空格),例如:

$string = "TB Avrupa ve Türkiye'nin en iyi oranlari ile Lider Bahis Sitesi!!";
$final_title = preg_replace('/[^a-z]+/i', '', $string); 

这会删除所有内容(包括空格),我需要保留空格,是否可以在前一行添加任何内容来实现这一点?

期望输出:

TB Avrupa ve Türkiyenin en iyi oranlari ile Lider Bahis Sitesi

2
预计输出是什么? - Alex Filipovici
哇,所有的答案都在同一时间给出了相同的答案! - Ramchandra Apte
https://dev59.com/yG025IYBdhLWcg3w_a6r - gimg1
4个回答

6

您可以使用此正则表达式仅保留英文字母、数字和空格:

/[^\w\s]/gi

preg_replace('/[^a-z\d ]+/i', '', $string); 

正则表达式的哪一部分使它不区分大小写?是/i吗? - David Brossard
@DavidBrossard:如果要避免使用/i,则需要使用/[^A-Za-z\d ]+/来代替a-z部分。 - anubhava
1
@DavidBrossard 是的,末尾的 i 指定了那个。 - Prix
1
@DavidBrossard / 表示模式的开始和结束。然后 i 是不区分大小写的选项。 - Buh Buh

2

只需包含您想保留的任何字符:

'/[^a-z0-9 ]+/i'

1
您需要将您的正则表达式更改为这样:

$final_title = preg_replace('/[^a-z0-9 ]+/i', '', $string);

这将保留数字和空格。


我不确定您的具体要求是什么,但在某些语言中,ü 是一个有效的字母。
如果您想保留这些内容,您需要使用以下正则表达式:
$final_title = preg_replace('/[\p{L}0-9 ]+/i', '', $string);

0

试试这个:

preg_replace('/[^A-Z^a-z^0-9^şŞıİçÇöÖüÜĞğ ]+/i', '', $string); 

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