从ereg_replace迁移到preg_replace

时间:2009-12-30 00:32:59

标签: php

只需从PHP 5.2迁移到5.3,需要付出很多努力!以下是好的,或者你会采取不同的做法吗?

$cleanstring = ereg_replace("[^A-Za-z0-9]^[,]^[.]^[_]^[:]", "", $critvalue);

$cleanstring = preg_replace("[^A-Za-z0-9]^[,]^[.]^[_]^[:]", "", $critvalue);

全部谢谢

2 个答案:

答案 0 :(得分:3)

作为克莱图斯回答的后续行动:

我也不熟悉POSIX正则表达式语法(ereg_ *),但根据您的标准,以下内容应该符合您的要求:

$cleanstring = preg_replace('#[^a-zA-Z0-9,._:]#', '', $critvalue);

这将删除除a-z,A-Z,0-9和puncation字符之外的所有内容。

答案 1 :(得分:2)

我对ereg_ *函数并不熟悉,但你的preg版本有几个问题:

  1. ^表示字符串的开头,所以在中间它不匹配任何东西;和
  2. 您需要分隔正则表达式;
  3. 一个例子:

    $out = preg_replace('![^0-9a-zA-Z]+!', '', $in);
    

    注意我正在使用!分隔正则表达式,但你可以很容易地使用/,〜或其他什么。以上删除了除数字和字母之外的所有内容。

    请参阅Pattern Syntax,特别是Delimiters