note 29380 deleted from function.ucwords by derick
| From: | derick@php.net | Date: | Tue, 30 Aug 2005 11:04:01 +0000 |
| Subject: | note 29380 deleted from function.ucwords by derick | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-94385@lists.php.net to get a copy of this message | ||
Note Submitter: Edemilson Lima - pulstar at mail dot com
----
Not everything must be capitalized. Many times we need words to be in lowercase or all in uppercase.
When a word have numbers for example, it may be a special code that must not be changed. The
function below is my best effort to produce an human-like capitalization of strings. Try it for
yourself and take your own conclusions. It is automatic and also works with some foreign characters.
The second optional parameter when set to zero produce strings like ucfirst() function (by default
it generate strings like ucwords() function).
function finecase($str,$type="words") {
$arr=explode(" ",$str);
foreach($arr as $key=>$value) {
if(eregi("^[AEIOUÀ-ÿ]{1,2}$",$value)) {
$value=strtolower($value);
}
if(eregi("^[B-DF-HJ-NP-TV-Z][AEIOUÀ-ÆÈ-æè-ÿ]$",$value)) {
$value=strtolower($value);
}
if(eregi("^[AEIOUÀ-ÿ][B-DF-HJ-NP-TV-Z]$",$value)) {
$value=strtolower($value);
}
if(eregi("^[A-ZÀ-ÿ-]{3,50}$",$value)) {
if($type=="words" or !$key) {
$value=ucfirst(strtolower($value));
} else {
$value=strtolower($value);
}
} elseif(eregi("^.{3,50}$",$value)) {
if($type=="words" or !$key) {
$value=ucfirst($value);
}
}
if(eregi("^[A-ZÀ-ÿ]+([!-/:-@\-`{-~]+[A-ZÀ-ÿ]+)+$", $value)) {
if($type=="words" or !$key) {
$value=ucwords(strtolower($value));
} else {
$value=strtolower($value);
}
}
if(eregi("^[A-ZÀ-ÿ]{3,50}(,|\.+)$",$value)) {
if($type=="words" or !$key) {
$value=ucfirst(strtolower($value));
} else {
$value=strtolower($value);
}
}
if(eregi("^[b-df-hj-np-tv-zçñ]+$",$value)) {
$value=strtoupper($value);
}
if(eregi("^.+$",$value) and ereg("^.*(\.+|\?|!|;)$",$arr[$key-1])) {
$value=ucfirst($value);
}
$arr[$key]=$value;
}
$str=join(" ",$arr);
return $str;
}
Regards,
Edemilson Lima