PHP preg_replace特殊字符

时间:2011-12-13 02:15:27

标签: php

我想用下划线/&%#$替换所有非字母和数字字符,例如(_)等,并将所有'(单引号)替换为“”空白(所以没有下划线)。

所以“没有任何”(忽略双引号)会变成“ There_wouldnt_be_any ”。

我对reg表达式没用,因此发布了帖子。

干杯

3 个答案:

答案 0 :(得分:32)

$newstr = preg_replace('/[^a-zA-Z0-9\']/', '_', "There wouldn't be any");
$newstr = str_replace("'", '', $newstr);

我将它们分成两行,以使代码更清晰。

注意:如果您正在寻找Unicode支持,请参阅下面的Filip的答案。除了A-z之外,它还将匹配所有注册为字母的字符。

答案 1 :(得分:29)

如果您通过写“非字母和数字”排除超过[A-Za-z0-9](即考虑像åäö这样的字母作为字母)并希望能够准确处理UTF-8字符串\p{L}\p{N}将有所帮助。

  1. \p{N}将匹配任何“数字
  2. \p{L}将匹配任何“字母字符”,其中包括
    • 小写字母
    • 修饰符字母
    • 其他信件
    • 标题案例信件
    • 大写字母
  3. 文档PHP: Unicode Character Properties


    $data = "Thäre!wouldn't%bé#äny";
    
    $new_data = str_replace  ("'", "", $data);
    $new_data = preg_replace ('/[^\p{L}\p{N}]/u', '_', $new_data);
    
    var_dump (
      $new_data
    );
    

    输出

    string(23) "Thäre_wouldnt_bé_äny"
    

答案 2 :(得分:2)

分两步完成:

  1. this正则表达式替换非字母字符:

    [\/\&%#\$]

  2. this正则表达式替换引号:

    [\"\']

  3. 并使用preg_replace

    $stringWithoutNonLetterCharacters = preg_replace("/[\/\&%#\$]/", "_", $yourString);
    $stringWithQuotesReplacedWithSpaces = preg_replace("/[\"\']/", " ", $stringWithoutNonLetterCharacters);