从 PHP 中的字符串中删除除字母数字字符之外的所有内容

Posted

技术标签:

【中文标题】从 PHP 中的字符串中删除除字母数字字符之外的所有内容【英文标题】:Stripping everything but alphanumeric chars from a string in PHP 【发布时间】:2010-10-24 20:47:23 【问题描述】:

我想要一个正则表达式或其他字符串,它可以替换字符串中除字母数字字符(a-z0-9)之外的所有内容。所有诸如,@#$(@*810 之类的东西都应该被剥离。有什么想法吗?

编辑:我现在需要它来去除所有内容,但允许点,所以除了a-z, 1-9, . 之外的所有内容。想法?

【问题讨论】:

【参考方案1】:

这也适用于用下划线替换除数字、单词字符或句点之外的任何内容。对文件名很有用。

$clean = preg_replace('/[^\d\w.]+/', '_', $string);

【讨论】:

【参考方案2】:
$string = preg_replace("/[^a-z0-9.]+/i", "", $string);

匹配一个或多个非 a-z 0-9 [不区分大小写] 或“.”的字符并替换为“”

【讨论】:

我怎样才能改变它只允许点(即)? 字符集中的点不需要转义。 您真的需要+ 符号吗?有人在下面发帖,没有+ 符号。 @kuchi:非常老的问题,但我刚刚遇到它:如果你用空字符串替换它并没有什么区别。如果你用其他东西代替它确实会有所作为,比如破折号("-")。使用+,它会将"test$!§test" 更改为"test-test"。如果没有"+",它将更改为"test---test"【参考方案3】:
/[^a-z0-9.]/

应该做的伎俩

【讨论】:

我怎样才能改变它只允许点(即)? 请填写完整的正则表达式?我不知道语法【参考方案4】:

我喜欢为此使用 [^[:alnum:]],这样可以减少出错的空间。

preg_replace('/[^[:alnum:]]/', '', "(ABC)-[123]"); // returns 'ABC123'

【讨论】:

【参考方案5】:

试试:

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

/i 代表不区分大小写(当然,如果你需要的话)。

【讨论】:

以上是关于从 PHP 中的字符串中删除除字母数字字符之外的所有内容的主要内容,如果未能解决你的问题,请参考以下文章