代码之家  ›  专栏  ›  技术社区  ›  EvilChookie

preg_replace-保留不需要的字符

  •  0
  • EvilChookie  · 技术社区  · 17 年前

    $string = "Hello World!";
    

    function stripJunk($string){
        $string = str_replace(" ", "-", $string);
        $string = preg_replace("/[^a-zA-Z]\s/", "", $string);
        $string = strtolower($string);
        return $string;
    }
    

    然而,当我运行我的 $string

    $string = "hello-world!";
    

    似乎有一些角色从我的preg_替换中溜走了,尽管据我所知,它们不应该是。

    应该是这样写的:

    $string = "hello-world";
    

    编辑1 当前位置我不知道正则表达式是初学者的东西,但不管怎样。此外,删除字符串中的\s不会产生所需的结果。

    预期的结果是:

    1. 将删除所有非A-Z或0-9的剩余字符。
    2. 然后将字符串转换为小写。

    编辑2+ :稍微整理一下我的代码。

    4 回复  |  直到 17 年前
        1
  •  5
  •   SilentGhost    17 年前

    以下对我来说效果不错:

    function stripJunk($string){
        $string = str_replace(" ", "-", trim($string));
        $string = preg_replace("/[^a-zA-Z0-9-]/", "", $string);
        $string = strtolower($string);
        return $string;
    }
    
        2
  •  3
  •   Tom Haigh    17 年前

    模式末尾的\s表示您将只替换紧跟空白字符的非字母字符。您可能希望将\s放在方括号内,以便保留空白,以后可以用破折号替换。

    如果还允许数字,则需要在方括号内添加0-9。

    例如:

    <?php
    
    $string = "Hello World!";
    
    function stripJunk($string){
        $string = preg_replace("/[^a-zA-Z0-9\s]/", "", $string);
        $string = str_replace(" ", "-", $string);
        $string = strtolower($string);
        return $string;
    }
    
    echo stripJunk($string);
    
        3
  •  1
  •   Thijs    17 年前

    您可以在一行中使用一些正则表达式来删除垃圾:

    <?php
    
    function strip_junk ($string) {
    
      // first, strip whitespace; and replace every non-alphabetic character by a dash
      $string = preg_replace("/[^a-z0-9-]/u", "-", strtolower(trim($string)));
    
      // second, remove double dashes
      $string = preg_replace("/-+/u", "-", $string);
    
      // finally, remove leading and trailing dashes
      $string = preg_replace("/^-*|-*$/u", "", $string);
    
      return $string;
    
    }
    
    ?>
    

        4
  •  0
  •   user142019 user142019    17 年前

    这个怎么样?

    preg_replace("/[.\n\r][^a-zA-Z]/", "", $string);
    

    如果这不起作用:

    preg_replace("/[.\n\r^a-zA-Z]/", "", $string);
    

    这样行吗?