删除任何非字母或数字的字母?

时间:2012-01-20 02:42:51

标签: php regex preg-replace preg-match

我使用preg_match来允许输入中的字母和数字

if(!preg_match('/^[a-zA-Z0-9]+$/', $file_rename))
{
$error = true;
echo '<error elementid="file_rename" message="FILE - please use alphabets and numbers only" />';
}

如果我想删除任何非字母或数字的字母怎么办?

例如,

test_1

test 1

,或者

test&2

test 2

2 个答案:

答案 0 :(得分:5)

PHP preg_replace docs正是您所寻找的:

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

注意正则表达式末尾的i修饰符 - 它使搜索不区分大小写。如果你不介意下划线,你可以选择:

$str = preg_replace('/[^\w]/', ' ', $str);

答案 1 :(得分:3)

最初,我会选择(unicode safe)

$newString = preg_replace('/[^\p{L}\p{N}]/u', ' ', $oldString);

如果你想留下现有的多个空间......

$newString = preg_replace('/[^\p{L}\p{N}\s]/u', ' ', $oldString);

如果要将连续的非字母数字字符压缩到单个空格中,请将其更改为

$newString = preg_replace('/[^\p{L}\p{N}]+/u', ' ', $oldString);
// note the + sign