RE: [PHP] Capitalizing names etc. part II - found a solution

2002-10-31 Thread Ford, Mike [LSS]
 -Original Message-
 From: -[ Rene Brehmer ]- [mailto:metalbunny;metalbunny.net]
 Sent: 30 October 2002 19:54

[snip, snip, snip...]

 My structure also ensure that 
 if someone's
 called something like Mackenzie for first name, it will not 
 be incorrectly
 cap'ed, as it only does the scotch-check on the last names...

And what if someone's last name *is* Mackenzie?  Or Macdonald?  Or any one
of several others I can think of that exist in both forms?

Cheers!

Mike

-
Mike Ford,  Electronic Information Services Adviser,
Learning Support Services, Learning  Information Services,
JG125, James Graham Building, Leeds Metropolitan University,
Beckett Park, LEEDS,  LS6 3QS,  United Kingdom
Email: [EMAIL PROTECTED]
Tel: +44 113 283 2600 extn 4730  Fax:  +44 113 283 3211 

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php




Re: [PHP] Capitalizing names etc. part II - found a solution

2002-10-30 Thread 1LT John W. Holmes
So if I have a last name like Macon, will it make it MacOn, or leave it
alone? How do you tell?

---John Holmes...
- Original Message -
From: -[ Rene Brehmer ]- [EMAIL PROTECTED]
To: [EMAIL PROTECTED]
Sent: Wednesday, October 30, 2002 2:53 PM
Subject: [PHP] Capitalizing names etc. part II - found a solution


 Hi y'all

 A while back I requested help for properly capitalizing names out of
 passed string values, as ucwords() and tokenizing didn't do the trick.

 Some kind soul gave me this scripple to work with:

  $text = What?No delimiters,shit happens here.this solves all
problems.;
  preg_match_all(/(\w+[,. ?])+/U, $text, $words);
  foreach($words[0] as $part) $uwords[] = ucfirst($part);
  $text = implode(, $uwords);
  echo $text;

 Which didn't work at all (even changing the variables to match my own),
 but only got me several errors for each line...

 My task was to make it take a string like
 firstname_middlename_firstlastname-lastlastname and properly capitalize
 it. Also wanted it to do it correctly with names like O'Connor, MacEnroe,
 McCarthy and such... The scribble above would be able to do it with the
 O'Connors and name-name formats, but useless with Mac/Mc names ... plus
 the above script part didn't work at all on my system (PHP 4.2.3 on Apache
 2.0.40 on WinXP Pro).

 OK ... so I wanted a compact structure that could do this easily, and
 correctly, on ANY name I threw at it...so I've spent a couple of hours
 finding useful functions in PHP that would do the trickery easiest ... and
 ended up with this:

 $name = $HTTP_GET_VARS['name'];

 // pull real name out of $name
 $realname = ;
 // okay, let's get the names cap'ed correctly...
 $startat = 0; // these vars are used for substring pulling
 $stoplen = 0;
 // parse 1, find funny chars and cap after them
 for ($i = 0; $i  strlen($name); $i++) {
$ltr = substr($name, $i, 1); // pull out letter i of name
$stoplen = $i - $startat;  // set the stop point for substring
// if current letter is a marker
if ($ltr == _ | $ltr == - | $ltr == ') {
   // add substring
   $realname .= ucfirst(substr($name, $startat, $stoplen));
   $startat = $i + 1;  // set new start point for substring
}
if ($ltr == _) {  // if space, add space
   $realname .=  ;
}
elseif ($ltr == -) { // if dash, add dash
   $realname .= -;
}
elseif ($ltr == ') {
   $realname .= ';
}
 }
 // the last name won't be added in parse 1,
 // this piece adds the last name AFTER checking and capping for Mac/Mc
 // so this is essentially pass 2
 $lastname = substr($name, $startat, $stoplen + 1);
 // find Mac/Mc
 $maclen = 0; // we set this to zero to make it easier to check for found
 if (strstr($lastname, mc) != false) {  // if Mc is found...
$maclen = 2;
 }
 elseif (strstr($lastname, mac) != false) {  // if Mac is found
$maclen = 3;
 }
 if ($maclen  0) {  // add the MacSomething with proper capitalization
$realname .= ucfirst(substr($lastname, 0, $maclen));
$realname .= ucfirst(substr($lastname, $maclen, strlen($lastname)));
 }
 else { // if we can't find Mac/Mc, just add the last name...
$realname .= ucfirst($lastname);
 }
 // end namegame

 The curious thing is that this actually runs faster than the strtok() +
 ucwords() combo I had before, plus it does the trick correctly, everytime.
 If anyone can see a more efficient way of doing this, I'm all for it.

 Do note that I've intentionally made it so that the last word of all names
 won't be added to the $realname, until it's determined whether or not it
 starts with Mac/Mc. The point to this is simple: It's a lot more
 complicated to scan for the Mac/Mc after the full name is assembled, than
 it is while it's being built. My structure also ensure that if someone's
 called something like Mackenzie for first name, it will not be incorrectly
 cap'ed, as it only does the scotch-check on the last names...

 If you can do this simpler, or have any comments for this way of doing it,
 please let me know. You may freely copy and dsitribute this as you wish.

 Rene
 --
 Rene Brehmer
 System developer in the making...

 This message was written on 100% recycled spam.

 Come see! My brand new site is now online!
 http://www.metalbunny.net

 --
 PHP General Mailing List (http://www.php.net/)
 To unsubscribe, visit: http://www.php.net/unsub.php



-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php