Cap Sentence

It’s odd sometimes the code that comes one when your tired:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function sentenceCap($str){
    $alphanumeric = "/[a-zA-Z0-9]/";
    $period = "/\./";
    $count = strlen($str);
    $newString = $str[0];
    for($i = 1; $i < $count; $i++){
      $curr = $str[$i];
      if (preg_match($period, $curr)){
        $nextCap  = true;
      }
      if(preg_match($alphanumeric, $curr)){
        if (!$nextCap){
          $curr = strtolower($curr);
        }else{
          $nextCap = false; 
        }
      }
      $newString .= $curr;
    } 
    return $newString;
  }

5 minutes on php.net… no luck… skrew it… 5 minutes of coding this absurd function. At least I can replace the implementation in the morning when I think of a better way to do it.

EDIT:
I didn’t have time to clean up the function yet but Evan Frohlich posted this really nice solution:

1
2
3
4
5
6
7
8
9
function sentenceCap($str){
    return preg_replace('/([.!?])\s*(\w)/e', "strtoupper('\\1 \\2')", ucfirst(strtolower($str)));
}
 
//Also regarding the above I think you should shift all of your strings 
//to Upper Case first. Otherwise un-capitalized words that begin a sentence will not be corrected.
 
//Line 4 should be:
$curr = strtoupper($str[$i]);


 
 
 

2 Responses to “Cap Sentence”

  1. Evan Frohlich
    15. April 2011 um 07:30

    There is a better way:

    function sentenceCap($str){
    return preg_replace(‘/([.!?])\s*(\w)/e’, “strtoupper(‘\\1 \\2’)”, ucfirst(strtolower($str)));
    }

    Also regarding the above I think you should shift all of your strings to Upper Case first. Otherwise un-capitalized words that begin a sentence will not be corrected.

    Line 4 should be:
    $curr = strtoupper($str[$i]);

    This will ensure Caps to start sentences.

  2. Zevan
    15. April 2011 um 07:49

    very nice… next semester you should come to my class and talk about string manipulation. Are you down for that?

Leave a Reply

Spam protection by WP Captcha-Free