PHP strip punctuation

后端 未结 4 1158
灰色年华
灰色年华 2020-12-05 00:12

Let\'s say I have this:

$hello = \"Hello, is StackOverflow a helpful website!? Yes!\";

and I want to strip punctuation so it outputs as:

相关标签:
4条回答
  • 2020-12-05 00:34

    I'd go with something like this:

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

    I don't know if that's more broad than you're looking for, but it sounds like what you're trying to do.

    I also notice you've replaced spaces with underscores in your sample. The code I'd use for that is:

    $str = preg_replace('/\s+/', '_', $str);
    

    Note that this will also collapse multiple spaces into one underscore.

    0 讨论(0)
  • 2020-12-05 00:35

    Without regular expressions:

    <?php
      $hello = "Hello, is StackOverflow a helpful website!? Yes!"; // original string
      $unwantedChars = array(',', '!', '?'); // create array with unwanted chars
      $hello = str_replace($unwantedChars, '', $hello); // remove them
      $hello = strtolower($hello); // convert to lowercase
      $hello = str_replace(' ', '_', $hello); // replace spaces with underline
      echo $hello; // outputs: hello_is_stackoverflow_a_helpful_website_yes
    ?>
    
    0 讨论(0)
  • 2020-12-05 00:41
    function strip_punctuation($string) {
        $string = strtolower($string);
        $string = preg_replace("/[:punct:]+/", "", $string);
        $string = str_replace(" +", "_", $string);
        return $string;
    }
    

    First the string is converted to lower case, then punctuation is removed, then spaces are replaced with underscores (this will handle one or more spaces, so if someone puts two spaces it will be replaced by only one underscore).

    0 讨论(0)
  • 2020-12-05 00:44
    # to keep letters & numbers
    $s = preg_replace('/[^a-z0-9]+/i', '_', $s); # or...
    $s = preg_replace('/[^a-z\d]+/i', '_', $s);
    
    # to keep letters only
    $s = preg_replace('/[^a-z]+/i', '_', $s); 
    
    # to keep letters, numbers & underscore
    $s = preg_replace('/[^\w]+/', '_', $s);
    
    # same as third example; suggested by @tchrist; ^\w = \W
    $s = preg_replace('/\W+/', '_', $s);
    

    for string

    $s = "Hello, is StackOverflow a helpful website!? Yes!";
    

    result (for all examples) is

    Hello_is_StackOverflow_a_helpful_website_Yes_

    Enjoy!

    0 讨论(0)
提交回复
热议问题