ucwords — Преобразует в верхний регистр первый символ каждого слова в строке


Ucwords — Преобразует в верхний регистр первый символ каждого слова в строке

Напишите функцию ucFirst(str) , возвращающую строку str с заглавным первым символом. Например:

Мы не можем просто заменить первый символ, так как строки в JavaScript неизменяемы.

Но можно пересоздать строку на основе существующей, с заглавным первым символом:

Однако есть небольшая проблемка. Если строка пуста, str[0] вернёт undefined , а у undefined нет метода toUpperCase() , поэтому мы получим ошибку.

Преобразует первый символ каждого слова в верхний регистр

У меня есть строка, и мне нужно преобразовать первую букву каждого слова в верхний регистр и остальные в нижний регистр с помощью xsl, например,

входная строка= dInEsh sAchdeV kApil Muk

Требуемая Строка Вывода= Dinesh Sachdev Kapil Muk

хотя, я знаю, что должен использовать функцию translate для этой цели, но как я могу перевести первый устав каждого слова в верхний регистр и отдохнуть все в нижнем регистре с помощью XSLT 1.0

7 ответов

следующее Не «приятно», и я уверен, что кто-то (в основном Дмитрий) может придумать что-то гораздо проще (особенно в XSLT 2.0). но я . —8проверили это, и это работает

основная идея заключается в том, что вы называете CamelCase , если он находит пробел, то он работает CamelCaseWord на все до пространство (т. е. первое слово), а затем называет CamelCase опять все после пробел (т. е. остальная часть предложения). В противном случае, если пробел не найден (потому что он дошел до последнего слова в предложении), то он просто вызывает CamelCaseWord .

на CamelCaseWord шаблон просто переводит первый символ из Нижнего в верхний (при необходимости) и все остальные символы из верхнего в Нижний (при необходимости).

так это назвать вы бы.

дополнительные:

я пропустил требование 1.0 в вопросе. Это будет работать только с версии 2.0.

оригинальный ответ ниже здесь.

Я считаю, что это сработало для меня некоторое время назад. Объявить функцию:

и использовать его:

вот 8-летний FXSL 1.x (XSLT 1.0 libray полностью написан в XSLT 1.0) решение:

когда это преобразование применяется к следующему XML-документу (test-strSplit-to-Words10.XML-код):

результат:

при применении к этому XML-документу (предоставленному вами образец):

результат:

С помощью всего лишь небольшой твик, мы получаем этот код:

который теперь производит желаемый результат:

объяснение:

на str-split-word-del шаблон FXSL может использоваться для токенизации с (возможно, более одного) разделителями, указанными в виде строки параметр.

Сделать первую букву заглавной (PHP)

Вступление

В PHP есть функция ucfirst() , которая первую букву в строке делает заглавной, ucwords() — делает заглавными буквы во всех словах строки, в работе с кириллицей, в юникоде, возникают проблемы.

Кириллица и юникод — вечная проблема всех версий PHP, частично проблема решена, существует функция string mb_convert_case (string str, int mode [, string encoding]) , которая принимает в качестве параметров строку, режим преобразования (0 — все буквы в верхний регистр, 1 — все буквы в нижний регистр, 2 — ВСЕ ПЕРВЫЕ буквы всех слов в верхний регистр) и кодировка.

Преобразование букв

Задача: преобразовать первую букву в строке и все первые буквы во всех словах в строке.

Английские буквы

С английскими буквами в стандартно-используемых кодировках (UTF-8 и Windows-1251) проблем не возникает.

Результат на экране
First letters
First Letters

Кириллица и Windows-1251

С кириллицей в Windows-1251 проблем так же не должно возникнуть.

Результат на экране
Первые буквы
Первые Буквы

Кириллица и UTF-8

С кириллицей в юникоде функции ucfirst() и ucwords() не справятся и преобразований не произойдет.

Для этого определяется функция mb_ucfirst(string str [, string encoding]) , которая будет обрабатывать юникод-строки.

Результат на экране
первые буквы
первые буквы
Первые буквы
Первые Буквы

UCWords не преобразует строку в верхний регистр для каждого слова

Используя руководство PHP по ucwords здесь, я преобразовал свое эхо PHP.

Результаты все еще находятся во всех верхних случаях:

1 ответ

15 Решение Code Lღver [2014-04-15 14:29:00]

Вам нужно сделать это:

В случае, если все последние находятся в верхних ucwords это не изменяет случай. поэтому вам нужно сначала преобразовать строку в нижнем регистре.

Вы можете увидеть пример в ссылке, которую вы даете. Ссылка здесь.

Вы все в верхнем случае, почему не работает.

Функция ucwords используется для преобразования первой буквы каждого слова в верхний регистр строки. И если он уже в верхнем регистре, то останется таким же. Это не будет работать для других букв слова, чтобы скрыть его в нижнем регистре.

UCWords не преобразования строки в верхний регистр для каждого слова


December 2020

5.2k раз

Использование PHP руководства по ucwords здесь я преобразовал мой PHP эхо.

Результаты по-прежнему в верхнем регистре, как это:

1 ответы

Вы должны сделать это:

В случае всех последних в верхний ucwords не делает никаких изменений дела. так что вам нужно , чтобы преобразовать строку в нижнем регистре первой.

Вы можете увидеть пример в ссылке , которая дана вам. Ссылка здесь .

Вы все слово в верхнем регистре, поэтому не работает.

ucwords Функция используется для преобразования первой буквы каждого слова в верхнем регистре строки. И если он находится в верхнем регистре уже тогда будет оставаться таким же. Он не будет работать на другую букву слова с секретным его в нижнем регистре.

ucwords

(PHP 4, PHP 5, PHP 7)

ucwords — Преобразует в верхний регистр первый символ каждого слова в строке

Описание

Возвращает строку str , в которой первый символ каждого слова переведен в верхний регистр, если этот символ является буквой.

Эта функция считает словами последовательности символов, разделенных пробельными символами, которыми являются пробел, разрыв страницы, перевод строки, возврат каретки, горизонтальная и вертикальная табуляция.

Список параметров

Возвращаемые значения

Возвращает модифицированную строку.

Примеры

Пример #1 Пример использования ucwords()

= ‘hello world!’ ;
$foo = ucwords ( $foo ); // Hello World!

$bar = ‘HELLO WORLD!’ ;
$bar = ucwords ( $bar ); // HELLO WORLD!
$bar = ucwords ( strtolower ( $bar )); // Hello World!
?>

Примечания

Замечание: Эта функция безопасна для обработки данных в двоичной форме.

Смотрите также

  • strtoupper() — Преобразует строку в верхний регистр
  • strtolower() — Преобразует строку в нижний регистр
  • ucfirst() — Преобразует первый символ строки в верхний регистр
  • mb_convert_case() — Производит смену регистра символов в строке

Коментарии

The code posted above by Joerg Krause only works for a string which ends with one of the delimiters. A possible fix is:

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

This seems to be what people want:

function uc_all($string) <
$temp = preg_split(‘/(\W)/’, $string, -1, PREG_SPLIT_DELIM_CAPTURE );
foreach ($temp as $key=>$word) <
$temp[$key] = ucfirst(strtolower($word));
>
return join (», $temp);
>

[ed note: fixed the code to be correct]

A function knowing about name case (i.e. caps on McDonald etc)

function name_case($name)
<
$newname = strtoupper($name[0]);
for ($i=1; $i 64) && (ord($subed) 48) && (ord($subed)

Correction to the code of firewire at itsyourdomain dot com:

preg_replace_callback(‘/\b(\w)(\w+)?/’,
create_function(‘$a’,
‘return strtoupper($a[1]) . ((sizeof($a) > 2 ) ?
strtolower($a[2]) : «»);’),
‘p.s.: hello.this is my string.’);

Will work with punctuation as well as spaces.

The code posted by neil doesn’t fully do what is wanted. Try adding some more question marks at the end and it will return a not wanted string.

Below code will uppercase all your words regardless of the delimiter.

= «What?No ‘delimiters’,shit \»happens\» here.this solves all problems. » ;
preg_match_all ( ‘/[A-Za-z]+|[^A-Za-z]+/’ , $text , $data );
for ( $i = 0 ; $i count ( $data [ 0 ]); $i ++) <
$data [ 0 ][ $i ] = ucfirst ( $data [ 0 ][ $i ]);
>
$text = implode ( «» , $data [ 0 ]);
print $text ;
?>

Here’s a piece that allows you to use the contents of a directory.. capitalizes the words and make links.. this particular example splits file names at _ and only selects file with .htm extensions (thought you could use any extension and call it using include() or soom such)
ie my_file_name.htm will produce
My File Name

= «/home/path/to/your/directory» ;
$mydir = dir ( $path );
while(( $file = $mydir -> read ()) !== false ) <
if( substr ( $file , — 4 )== ‘.htm’ ) <
$trans = array( «_» => » » , «.htm» => «» ); // creates the editing array
$newlist = strtr ( $file , $trans ); // edits using editing array
echo » . $file . «\»>» . ucwords ( $newlist ). «
» ;
>
>
?>

Илон Маск рекомендует:  Психология в дизайне

«ieure at php dot net», your idea is pure poetry!

The function below will standardize the capitalization on people’s names and the titles of reports and essays . You may need to adapt the lists in «$all_uppercase» and «$all_lowercase» to suit the data that you are working with.

function my_ucwords($str, $is_name=false) <
// exceptions to standard case conversion
if ($is_name) <
$all_uppercase = »;
$all_lowercase = ‘De La|De Las|Der|Van De|Van Der|Vit De|Von|Or|And’;
> else <
// addresses, essay titles . and anything else
$all_uppercase = ‘Po|Rr|Se|Sw|Ne|Nw’;
$all_lowercase = ‘A|And|As|By|In|Of|Or|To’;
>
$prefixes = ‘Mc’;
$suffixes = «‘S»;

// captialize all first letters
$str = preg_replace(‘/\\b(\\w)/e’, ‘strtoupper(«$1»)’, strtolower(trim($str)));

if ($all_uppercase) <
// capitalize acronymns and initialisms e.g. PHP
$str = preg_replace(«/\\b($all_uppercase)\\b/e», ‘strtoupper(«$1»)’, $str);
>
if ($all_lowercase) <
// decapitalize short words e.g. and
if ($is_name) <
// all occurences will be changed to lowercase
$str = preg_replace(«/\\b($all_lowercase)\\b/e», ‘strtolower(«$1»)’, $str);
> else <
// first and last word will not be changed to lower case (i.e. titles)
$str = preg_replace(«/(?

In the function ucsmart() posted by ieure at php dot net on 04-Dec-2005 11:57, I found a similar problem in this function to what he found in igua’s.

function ucsmart ( $text )
<
return preg_replace ( ‘/([^a-z]|^)([a-z])/e’ , ‘»$1″.strtoupper(«$2»)’ ,
strtolower ( $text ));
>
?>

«igua’s code adds a backslash in front of the first single quote for me. This doesn’t alter the content in any way other than changing case.»

Actually, it did end up changing the content for me (php 5.0.4) in the way that this function escapes a single quotation (apostrophe) in the MIDDLE of a word.

The fix is simple however, and merely requires fine-tuning the regular expression:

function ucsmart ( $text )
<
return preg_replace ( ‘/([^a-z\’]|^)([a-z])/e’ , ‘»$1″.strtoupper(«$2»)’ ,
strtolower ( $text ));
>
?>

(note: while previewing this note before adding it, I am noticing php’s website is not correctly displaying the change I made as I wrote it. After the first a-z in the expression, the single quotation should be escaped. If it isn’t you will get a parse error! And apoligies if my text here is colored as php code; not my fault!)

This will not escape a single quotation mark which occurs in the middle of a word. Though, you may find that might need to add other characters inside the regular expression if you use other special characters inside your words and if you get funky output.


It’s a great expression though! Simple, yet very powerful. Kudos!

Response to arif:

We do not need that long functions. In order to make ucwords() worked properly in Turkish words that contain speacial characters, we can use the following command in our php codes:

This will set locale to Turkish.

Simple helper function to walk through a nested array of strings and upper case them:

/**
* Helper function to convert an array of strings to upper case words
*/
function _capitalize ( $input ) <
if( is_array ( $input )) <
// recurse through array elements (using a reference)
foreach( $input as & $value ) <
$value = _capitalize ( $value );
>
return $input ;
> elseif( is_string ( $input )) <
// process this string
return ucwords ( $input );
> else <
// all other data types, leave alone
return $input ;
>
>
?>

ucwords that works also with apices: ‘
for example: «aquila d’abruzzo» became «Aquila d’Abruzzo»
The second part after the // comment can removed! Is optimized for italian language (leave lowercase articles, prepositions, conjunctions) but easily changeable. Notice che «‘s»!! for example «hotel 2000’s» becames «Hotel 2000’s».

function my_ucwords($s)
<
$a=strtolower($s);
$s=ucfirst($a);
for($x=0; $x 0 && $pos

I have rewritten a UCSMART function adding a feature to translate special ASCII char (windows occidental ascii charset):

You can edit/add/delete char by use the first two string (be carefull to preserve the order of the string).

= «àáâãäåæçèéêëìíîïðñòóôõöùúûüýÿžš» ;
$ASCII_SPC_MAX = «ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝŸŽŠ» ;

function str2upper ( $text ) <
global $ASCII_SPC_MIN , $ASCII_SPC_MAX ;
return strtr ( strtoupper ( $text ), $ASCII_SPC_MIN , $ASCII_SPC_MAX );
>
function str2lower ( $text ) <
global $ASCII_SPC_MIN , $ASCII_SPC_MAX ;
return strtr ( strtolower ( $text ), $ASCII_SPC_MAX , $ASCII_SPC_MIN );
>
function ucsmart ( $text ) <
global $ASCII_SPC_MIN ;
return preg_replace (
‘/([^a-z’ . $ASCII_SPC_MIN . ‘]|^)([a-z’ . $ASCII_SPC_MIN . ‘])/e’ ,
‘»$1″.str2upper(«$2»)’ ,
str2lower ( $text )
);
>
?>

Massimiliano Cuttini

A very easy way to convert to title case:

function titleCase($string)
<
return ucwords(strtolower($string));
>

$myString = «SOME TEXT»;

//will print, «My Text»

ucwords() only excepts whitespace in front of a word, although some chars like ‘»‘ or ‘(‘ normally have no space between them and the following word:
= ‘ELVIS «THE KING» PRESLEY — (LET ME BE YOUR) TEDDY BEAR’ ;
echo ucwords ( strtolower ( $title ));
?>
prints: Elvis «the King» Presley — (let Me Be Your) Teddy Bear

To avoid this i use a small function adding and deleting blanks behind these chars, and using ucwords() in between:

function my_ucwords ( $string )
<
$noletters = ‘»([/’ ; //add more if u need to
for( $i = 0 ; $i strlen ( $noletters ); $i ++)
$string = str_replace ( $noletters [ $i ], $noletters [ $i ]. ‘ ‘ , $string );
$string = ucwords ( $string );
for( $i = 0 ; $i strlen ( $noletters ); $i ++)
$string = str_replace ( $noletters [ $i ]. ‘ ‘ , $noletters [ $i ], $string );
return $string ;
>

$title = ‘ELVIS «THE KING» PRESLEY — (LET ME BE YOUR) TEDDY BEAR’ ;
echo my_ucwords ( strtolower ( $title ));
?>

prints: Elvis «The King» Presley — (Let Me Be Your) Teddy Bear

Here is a function to capitalize a last name, accounting for hyphens, apostrophes, «Mc» and «Mac»:

function CapitalizeLastName ( $name ) <
$name = strtolower ( $name );
$name = join ( «‘» , array_map ( ‘ucwords’ , explode ( «‘» , $name )));
$name = join ( «-» , array_map ( ‘ucwords’ , explode ( «-» , $name )));
$name = join ( «Mac» , array_map ( ‘ucwords’ , explode ( «Mac» , $name )));
$name = join ( «Mc» , array_map ( ‘ucwords’ , explode ( «Mc» , $name )));
return $name ;
>
?>

I speed tested it against functions that used preg_replace() with an «e» modifier, preg_replace_callback(), and a character-by-character parsing. Unexpectedly, this function using join(), array_map() and explode() was fastest.

Function to do what ucwords is intended to do — just correctly also for international char sets:

function mb_ucwords($s)
<
$s = mb_strtolower(trim($s));
$w = explode(» «, $s);

$return = «»;
foreach ($w as $val)
<
$return .= » » . mb_strtoupper($val<0>) . substr($val,1,strlen($val)-1);
>
return trim($return);
>

Building on an earlier snippet here.

Relating to the mb_ucwords() function posted by Anonymous. In order for this to actually be multi-byte compliant, you would also need to use mb_substr() and mb_strlen() instead of substr and strlen respectively.

Here it is corrected and extended even further to allow multiple word separators and a list of exceptions to correct after title casing. It’s a bit tedious and inelegant, but things frequently are when dealing with human languages.

function mb_ucwords($str) <
$exceptions = array();
$exceptions[‘Hp’] = ‘HP’;
$exceptions[‘Ibm’] = ‘IBM’;
$exceptions[‘Gb’] = ‘GB’;
$exceptions[‘Mb’] = ‘MB’;
$exceptions[‘Cd’] = ‘CD’;
$exceptions[‘Dvd’] = ‘DVD’;
$exceptions[‘Usb’] = ‘USB’;
$exceptions[‘Mm’] = ‘mm’;
$exceptions[‘Cm’] = ‘cm’;
// etc.

$str = mb_strtolower(trim($str));
foreach($separator as $s) <
$word = explode($s, $str);

$return = «»;
foreach ($word as $val) <
$return .= $s . mb_strtoupper($val<0>) . mb_substr($val,1,mb_strlen($val)-1);
>
$str = mb_substr($return, 1);
>

foreach($exceptions as $find=>$replace) <
if (mb_strpos($return, $find) !== false) <
$return = str_replace($find, $replace, $return);
>
>
return mb_substr($return, 1);
>

An improved of ucsentence. In fact its a function to avoid ugly data entry. It’s based on code taken from this page. Can be inproved for better performance, of course.

Features:
1- removes duplicated question marks, an exclamations
2- Capitalize first letter of a sentence.
3- split sentences not only with «.» but also with «?» and «!»
4- Puts a white space at the begining of each sentence
5- undestand the meaning of «¡» and «¿» in languages like spanish.
6- undestand the htmlentitity version of this simbols.

function sentenceNormalizer( $sentence_split ) <

$sentence_split = preg_replace(«/[!]+/»,»!»,$sentence_split);
$sentence_split = preg_replace(«/[¡]+/»,»¡»,$sentence_split);
$sentence_split = preg_replace(«/[?]+/»,»?»,$sentence_split);
$sentence_split = preg_replace(«/[¿]+/»,»¿»,$sentence_split);

$textbad = preg_split(«/(\ «.
«\!(\s)?|\.(\s)?|\?(\s)?|¿(\s)?|¡(\s)?».
«|¿(\s)?|¡(\s)?)/»,
$sentence_split,-1,PREG_SPLIT_DELIM_CAPTURE);
$newtext = array();
$count = sizeof($textbad);

$textgood = implode($newtext);
return $textgood;
>

I modified Q1712’s code (below) to use regular expressions
instead of characters to properly capitalize words that fall
directly after an unwanted character. See his post for details.

This version allows me to use it around html elements, etc.

function my_ucwords ( $string )<

foreach( $invalid_characters as $regex ) <
$string = preg_replace ( ‘/(‘ . $regex . ‘)/’ , ‘$1 ‘ , $string );
>

$string = ucwords ( $string );

foreach( $invalid_characters as $regex ) <
$string = preg_replace ( ‘/(‘ . $regex . ‘) /’ , ‘$1’ , $string );
>

return $string ;
>
?>

Moreover, to get a proper title case, i combine it with this function:

This Function is obtained from:
http://codesnippets.joyent.com/posts/show/716

function title_case ( $title ) <
$smallwordsarray = array(
‘of’ , ‘a’ , ‘the’ , ‘and’ , ‘an’ , ‘or’ , ‘nor’ , ‘but’ , ‘is’ , ‘if’ , ‘then’ ,
‘else’ , ‘when’ ,
‘at’ , ‘from’ , ‘by’ , ‘on’ , ‘off’ , ‘for’ , ‘in’ , ‘out’ ,
‘over’ , ‘to’ , ‘into’ , ‘with’
);

$words = explode ( ‘ ‘ , $title );
foreach ( $words as $key => $word )
<
if ( $key == 0 or ! in_array ( $word , $smallwordsarray ))
$words [ $key ] = $this -> my_ucwords ( strtolower ( $word ));
>

$newtitle = implode ( ‘ ‘ , $words );
return $newtitle ;
>
?>
Hope you find it useful.

A modified sentenceNormalizer by gregomm

Features:
1- Removes duplicated question marks, exclamations and periods
2- Capitalize first letter of a sentence.
3- Split sentences not only with «.» but also with «?» and «!»
4- Puts a white space at the end of each sentence
5- Retains newlines

Илон Маск рекомендует:  ol в HTML

—removed from orginal function—
undestand the meaning of «¡» and «¿» in languages like spanish.
undestand the htmlentitity version of this simbols.
—removed from orginal function—

function sentenceNormalizer ( $sentence_split ) <
$sentence_split = preg_replace (array( ‘/[!]+/’ , ‘/[?]+/’ , ‘/[.]+/’ ),
array( ‘!’ , ‘?’ , ‘.’ ), $sentence_split );

$textbad = preg_split ( «/(\!|\.|\?|\n)/» , $sentence_split ,- 1 , PREG_SPLIT_DELIM_CAPTURE );
$newtext = array();
$count = sizeof ( $textbad );

foreach( $textbad as $key => $string ) <
if (!empty( $string )) <
$text = trim ( $string , ‘ ‘ );
$size = strlen ( $text );


if ( $size > 1 ) <
$newtext [] = ucfirst ( strtolower ( $text ));
>
elseif ( $size == 1 ) <
$newtext [] = ( $text == «\n» ) ? $text : $text . ‘ ‘ ;
>
>
>

return implode ( $newtext );
>
?>

I have looked for a work-around that would upper-case letter after an ‘ too.

would output «O’lunney’s» and I wanted it to output «O’Lunney’s».

Here is my function:

function my_ucwords ( $string ) <
$string = ucwords ( strtolower ( $string ));
$string = preg_replace_callback ( «/( [ a-zA-Z]<1>‘)([a-zA-Z0-9]<1>)/s» , create_function ( ‘$matches’ , ‘return $matches[1].strtoupper($matches[2]);’ ), $string );
return $string ;
>
?>

Hope it helps someone.

ucwords for UTF-8 strings:

function mb_ucwords ( $str ) <
$str = mb_convert_case ( $str , MB_CASE_TITLE , «UTF-8» );
return ( $str );
>
?>

When attempting to adopt a solution similar to Catalin’s post (20-Oct-2008 10:14), I ran into some additional problems. Just a heads up, Catalin’s wasn’t capitalizing correctly when a name like «O’reilley» appeared at the start of the string or a new line. Also, it doesn’t account for locale-sensitivity.

I also needed to recognize additional Irish surnames, such as «McArthur/MacArthur» or «FitzGerald». I also didn’t want to misinterpret French as an Irish surname, so, «S’il vous plaît» shouldn’t result in the «i» in «S’il» capitalized.

I modified Catalin’s version, but it’s still not perfect. This version happened to suit my needs, so be sure to assess your own needs before using.

function my_ucwords ( $str )
<
$str = ucwords ( $str );

// Not perfect
return preg_replace (
‘/
(?: ^ | \\b ) # assertion: beginning of string or a word boundary
( O\’ | Ma?c | Fitz) # attempt to match Irish surnames
( [^\W\d_] ) # match next char; we exclude digits and _ from \w
/xe’ ,
«‘\$1’ . strtoupper(‘\$2’)» ,
$str );
>

I did the same thing as Catalin, but for French names.

Here’s what I’m doing :

For each word (not considering the single-quote as a word boundary character) :
— Put the word in lower case
— If the word is «de», return, else, put the first letter in upper-case
— See if the second character of the word is a single-quote
— Yes ? Put the next char in upper case
— And if the char before the single quote is D, put it back to lower case (-> d)

This complies with the French rules for capitalization in names.

Sample results :
-d’Afoo Bar
-de Foo Bar
-O’Foo Bar
-Foo’bar

function my_ucwords ( $s ) <
$s = preg_replace_callback ( «/(\b[\w|’]+\b)/s» , fixcase_callback , $s );

function fixcase_callback ( $word ) <

$word = strtolower ( $word );

if( $word == «de» )
return $word ;

$word = ucfirst ( $word );

if( substr ( $word , 1 , 1 ) == «‘» ) <
if( substr ( $word , 0 , 1 ) == «D» ) <
$word = strtolower ( $word );
>
$next = substr ( $word , 2 , 1 );
$next = strtoupper ( $next );
$word = substr_replace ( $word , $next , 2 , 1 );
>

Some recipes for switching between underscore and camelcase naming:

// underscored to upper-camelcase
// e.g. «this_method_name» -> «ThisMethodName»
preg_replace ( ‘/(?:^|_)(.?)/e’ , «strtoupper(‘$1’)» , $string );

// underscored to lower-camelcase
// e.g. «this_method_name» -> «thisMethodName»
preg_replace ( ‘/_(.?)/e’ , «strtoupper(‘$1’)» , $string );

// camelcase (lower or upper) to underscored
// e.g. «thisMethodName» -> «this_method_name»
// e.g. «ThisMethodName» -> «this_method_name»
strtolower ( preg_replace ( ‘/([^A-Z])([A-Z])/’ , «$1_$2» , $string ));
?>

Of course these aren’t 100% symmetric. For example.
* this_is_a_string -> ThisIsAString -> this_is_astring
* GetURLForString -> get_urlfor_string -> GetUrlforString

My quick and dirty ucname (Upper Case Name) function.

function ucname ( $string ) <
$string = ucwords ( strtolower ( $string ));

foreach (array( ‘-‘ , ‘\» ) as $delimiter ) <
if ( strpos ( $string , $delimiter )!== false ) <
$string = implode ( $delimiter , array_map ( ‘ucfirst’ , explode ( $delimiter , $string )));
>
>
return $string ;
>
?>
//TEST

$names =array(
‘JEAN-LUC PICARD’ ,
‘MILES O\’BRIEN’ ,
‘WILLIAM RIKER’ ,
‘geordi la forge’ ,
‘bEvErly CRuSHeR’
);
foreach ( $names as $name ) < print ucname ( "<$name>\n» ); >

//PRINTS:
/*
Jean-Luc Picard
Miles O’Brien
William Riker
Geordi La Forge
Beverly Crusher
*/
?>

You can add more delimiters in the for-each loop array if you want to handle more characters.

Is more simple to use str_replace to use ucwords without using space as separator like:

function ucwordsEx ( $str , $separator )<

$str = str_replace ( $separator , » » , $str );
$str = ucwords ( strtolower ( $str ));
$str = str_replace ( » » , $separator , $str );
return $str ;

>
/*
Example:
*/
echo ucwordsEx ( «HELLO-my-NAME-iS-maNolO» , «-» );
/*
Prints: «Hello My Name Is Manolo»
*/

Another ucwords function with custom separator.

function ucwords_custom ( $str , $sep )
<
return preg_replace_callback ( ‘/’ . preg_quote ( $sep ) . ‘./i’ , create_function (
‘$match’ ,
‘return strtoupper($match[0][1]);’
), $str );
>
?>

or simpler with PHP5.3

function ucwords_custom2 ( $str , $sep = ‘ ‘ )
<
return preg_replace_callback ( ‘/’ . preg_quote ( $sep ) . ‘./i’ , function( $match ) <
return strtoupper ( $match [ 0 ][ 1 ]);
>, $str );
>
?>

Because I needed a function that did the same as the function proper in Excel I created this little function :

function proper ( $string )<

$string = strtolower ( $string );

$string [ 0 ] = strtoupper ( $string [ 0 ]);

for ( $index = 1 ; $index strlen ( $string ); $index ++) <
if ( strpos ( $lettersAndNumbers , $string [ $index ]) === false ) <
if ( $index + 1 strlen ( $string )) <
$string [ $index + 1 ] = strtoupper ( $string [ $index + 1 ]);
$index ++;
>
>
>

Turkish character with the ucwords function.

function ucwords_tr ( $gelen )<

$kelimeler = explode ( » » , $gelen );

foreach ( $kelimeler as $kelime_duz )<

$kelime_uzunluk = strlen ( $kelime_duz );
$ilk_karakter = mb_substr ( $kelime_duz , 0 , 1 , ‘UTF-8’ );

if( $ilk_karakter == ‘Ç’ or $ilk_karakter == ‘ç’ )<

>elseif ( $ilk_karakter == ‘Ğ’ or $ilk_karakter == ‘ğ’ ) <

>elseif( $ilk_karakter == ‘I’ or $ilk_karakter == ‘ı’ )<

>elseif ( $ilk_karakter == ‘İ’ or $ilk_karakter == ‘i’ )<

>elseif ( $ilk_karakter == ‘Ö’ or $ilk_karakter == ‘ö’ )<


>elseif ( $ilk_karakter == ‘Ş’ or $ilk_karakter == ‘ş’ )<

>elseif ( $ilk_karakter == ‘Ü’ or $ilk_karakter == ‘ü’ )<

$ilk_karakter = strtoupper ( $ilk_karakter );

$digerleri = mb_substr ( $kelime_duz , 1 , $kelime_uzunluk , ‘UTF-8’ );
$sonuc .= $ilk_karakter . kucuk_yap ( $digerleri ). ‘ ‘ ;

$son = trim ( str_replace ( ‘ ‘ , ‘ ‘ , $sonuc ));
return $son ;

function kucuk_yap ( $gelen )<

$gelen = str_replace ( ‘Ç’ , ‘ç’ , $gelen );
$gelen = str_replace ( ‘Ğ’ , ‘ğ’ , $gelen );
$gelen = str_replace ( ‘I’ , ‘ı’ , $gelen );
$gelen = str_replace ( ‘İ’ , ‘i’ , $gelen );
$gelen = str_replace ( ‘Ö’ , ‘ö’ , $gelen );
$gelen = str_replace ( ‘Ş’ , ‘ş’ , $gelen );
$gelen = str_replace ( ‘Ü’ , ‘ü’ , $gelen );
$gelen = strtolower ( $gelen );

echo ucwords_tr ( ‘ŞEKardi ŞEMŞİYE ĞELENÖ ÖMER’ ); // Şekardi Şemşiye Ğelenö Ömer
echo ucwords_tr ( ‘şEKER iMSAK şÖLEN’ ); // Şeker İmsak Şölen

Recently i got a request from a client to make the first letter of any word in capital even they are separated by hyphen.

Eg : donzé pierre-yves => Donzé Pierre-Yves
joye-cagnard frédéric => Joye-Cagnard Frédéric

ucwords(«donzé pierre-yves») can make it display
Donzé Pierre-yves but actually i need even the first letter of the second word to be in capital.

So in order to get this i have just written a function below and it works fine. But i hope there would be a better and easier way to do this if so kindly share.

= «donzé pierre-yves» ;
echo ucwordsHyphen ( $str ); /*returns Donzé Pierre-Yves*/

function ucwordsHyphen ( $str ) <
$converted_str = «» ;
$str_array = explode ( » » , $str );
foreach( $str_array as $key => $value ):
if( strpos ( $value , ‘-‘ )):
$value = str_replace ( «-» , » » , $value );
$value = ucwords ( strtolower ( $value ));
$value = str_replace ( » » , «-» , $value );
else:
$value = ucwords ( strtolower ( $value ));
endif;
$converted_str .= » » . $value ;
endforeach;
return $converted_str ;
>
?>

Thanks.
And Proud to be a PHP Programmer always :-)

Make the first letter of any word in capital even they are separated by hyphen.

Eg : donzé pierre-yves => Donzé Pierre-Yves
joye-cagnard frédéric => Joye-Cagnard Frédéric

= «donzé pierre-yves» ;
echo ucwordsHyphen ( $str ); /*returns Donzé Pierre-Yves*/

function ucwordsHyphen ( $str ) <
return str_replace ( ‘- ‘ , ‘-‘ , ucwords ( str_replace ( ‘-‘ , ‘- ‘ , $str )));
>
?>

Thanks.

Thanks a lot brother.

I tested it with a few variations. It works perfectly. Its really great and simple usage of the existing functions. It would be glad to all PHP folks and good to PHP if these kind of functions will be in PHP library on upcoming releases.

= «mark-yves robert» ;
$name2 = «mark-yves robert-bryan» ;

echo ‘
Name 1 (mark-yves robert) =>’ .
ucwordspecific ( $name1 , ‘-‘ ); //returns Mark-Yves Robert

echo ‘
Name 2 (mark-yves robert-bryan)

=>’ . ucwordspecific ( $name2 , ‘-‘ );
//returns Mark-Yves Robert-Bryan

function ucwordspecific ( $str , $delimiter ) <
$delimiter_space = ‘- ‘ ;
return str_replace ( $delimiter_space , $delimiter , ucwords

( str_replace ( $delimiter , $delimiter_space , $str )));
>

Илон Маск рекомендует:  Что такое код findwindow

?>

Proud to be a PHP enthusiast always :-)

A proper Turkish solution;

function ucfirst_turkish ( $str ) <
$tmp = preg_split ( «//u» , $str , 2 , PREG_SPLIT_NO_EMPTY );
return mb_convert_case (
str_replace ( «i» , «İ» , $tmp [ 0 ]), MB_CASE_TITLE , «UTF-8» ).
$tmp [ 1 ];
>

function ucwords_turkish ( $str ) <
return preg_replace ( «/(\\w+)/ue» , «ucfirst_turkish(‘\\\\1’).’$2′» , $str );
>

$str = «iyilik güzelLİK şeker » ;
echo ucwords ( $str ) . «\\n» ; // Iyilik GüzelLİK şeker
echo ucwords_turkish ( $str ); // İyilik GüzelLİK Şeker
?>

Features:
— multi byte compatible
— handles multiple delimiters

function ucwords_specific ( $string , $delimiters = » , $encoding = NULL )
<
if ( $encoding === NULL )

if ( is_string ( $delimiters ))
<
$delimiters = str_split ( str_replace ( ‘ ‘ , » , $delimiters ));
>

$delimiters_pattern1 = array();
$delimiters_replace1 = array();
$delimiters_pattern2 = array();
$delimiters_replace2 = array();
foreach ( $delimiters as $delimiter )
<
$uniqid = uniqid ();
$delimiters_pattern1 [] = ‘/’ . preg_quote ( $delimiter ) . ‘/’ ;
$delimiters_replace1 [] = $delimiter . $uniqid . ‘ ‘ ;
$delimiters_pattern2 [] = ‘/’ . preg_quote ( $delimiter . $uniqid . ‘ ‘ ) . ‘/’ ;
$delimiters_replace2 [] = $delimiter ;
>

// $return_string = mb_strtolower($string, $encoding);
$return_string = $string ;
$return_string = preg_replace ( $delimiters_pattern1 , $delimiters_replace1 , $return_string );

$words = explode ( ‘ ‘ , $return_string );

foreach ( $words as $index => $word )
<
$words [ $index ] = mb_strtoupper ( mb_substr ( $word , 0 , 1 , $encoding ), $encoding ). mb_substr ( $word , 1 , mb_strlen ( $word , $encoding ), $encoding );
>

$return_string = implode ( ‘ ‘ , $words );

$return_string = preg_replace ( $delimiters_pattern2 , $delimiters_replace2 , $return_string );

return $return_string ;
>
?>

Params:
1. string: The string being converted
2. delimiters: a string with all wanted delimiters written one after the other e.g. «-‘»
3. encoding: Is the character encoding. If it is omitted, the internal character encoding value will be used.

Example Usage:
( ‘UTF-8’ );
$string = «JEAN-PAUL d’artagnan şŠ-òÀ-éÌ hello — world» ;
echo ucwords_specific ( mb_strtolower ( $string , ‘UTF-8’ ), «-‘» );
?>

Output:
Jean-Paul D’Artagnan Şš-Òà-Éì Hello — World

UTF-8 Title Case that works for me even with hyphens involved!

$str = ‘ĐaaČaa-AAAaaa, BBbb’;

$str = mb_convert_case($str, MB_CASE_TITLE, «UTF-8»);

echo($str): ‘Đaačaa-Aaaaaa, Bbbb’

This solution is a proper use of capitalize first letters of «TURKISH» sentence by ATÖLYE15 crew.

function ucwordstr($sentence)
<
$letters = array(‘I’,’İ’,’Ç’,’Ş’,’Ü’,’Ö’,’Ğ’);
$replace = array(‘ı’,’i’,’ç’,’ş’,’ü’,’ö’,’ğ’);

foreach(explode(» «,$sentence) as $word)
<
$first = str_replace($replace,$letters,mb_substr($word, 0, 1, «UTF-8»));
$other = mb_substr($word,1,strlen($word)-1,»UTF-8″);

$sentence = implode(» «,$words);

Para formatar nomes em pt-br:

function titleCase ( $string , $delimiters = array( » » , «-» , «.» , «‘» , «O'» , «Mc» ), $exceptions = array( «de» , «da» , «dos» , «das» , «do» , «I» , «II» , «III» , «IV» , «V» , «VI» ))
<
/*
* Exceptions in lower case are words you don’t want converted
* Exceptions all in upper case are any words you don’t want converted to title case
* but should be converted to upper case, e.g.:
* king henry viii or king henry Viii should be King Henry VIII
*/
$string = mb_convert_case ( $string , MB_CASE_TITLE , «UTF-8» );
foreach ( $delimiters as $dlnr => $delimiter ) <
$words = explode ( $delimiter , $string );
$newwords = array();
foreach ( $words as $wordnr => $word ) <
if ( in_array ( mb_strtoupper ( $word , «UTF-8» ), $exceptions )) <
// check exceptions list for any words that should be in upper case
$word = mb_strtoupper ( $word , «UTF-8» );
> elseif ( in_array ( mb_strtolower ( $word , «UTF-8» ), $exceptions )) <
// check exceptions list for any words that should be in upper case
$word = mb_strtolower ( $word , «UTF-8» );
> elseif (! in_array ( $word , $exceptions )) <
// convert to uppercase (non-utf8 only)
$word = ucfirst ( $word );
>
array_push ( $newwords , $word );
>
$string = join ( $delimiter , $newwords );
> //foreach
return $string ;
>

= ‘SÃO JOÃO DOS SANTOS’ ;
$v = titleCase ( $s ); // ‘São João dos Santos’
?>

This function will work on anything, not just words separated by spaces. (eg: ‘ac/bc/dc,xc zz’ => ‘Ac/Bc/Dc,Xc Zz’)

function ucwords_all($str) <
return preg_replace_callback(‘/\b(\w)/’, function($m) <
return strtoupper($m[0]);
>, $str);
>


to convert first letters in a firstname like: «jean-pierre» to «Jean-Pierre»:

I simply replace the ‘-‘ with a vertical tabulation, because the ucwords() function replace the letter just after it.

so, I use the sentence:
$result=str_replace(chr(11),’-‘,ucwords(strtolower(str_replace(‘-‘,chr(11),$firstname))));

After a while of trial and error it appears that ucwords does not convert a string that is already in all caps to the ucwords format as inidcated in the beginning of the function manual.

for example,
$a = my text
$b = ucwords($a)
echo $b = My Text.

However:
$a = MY TEXT;
$b = ucwords($a)
echo $b = MY TEXT

if the string is already uppercase, the function will not use strtolower then ucwords which is interpreted up above. I just wanted people to know that. I could not figure out what was going on.

This will correct capitalisation in names taking note of special capitalisation for Mc. Mac. and O’. Other special cases, of which I am not aware, can be added easily.

This is just a slight improvement on «deepdene at email dot com»‘s name_case function. Thank you for original function.

ucwords for human names in Brazil.
ucwords personalizada para nomes próprios brasileiros.

/**
* ucwords for human names in Brazil
* Edit from http://php.net/manual/pt_BR/function.ucwords.php#112795
* @param string $str
* @param array $delimiters
* @param array $exceptions Exceptions are words you don’t want converted
* @return string
*/
function name ( $str , $delimiters = array(
» » ,
«-» ,
«.» ,
«‘» ,
«O'» ,
«Mc» ,
), $exceptions = array(
«de» ,
«do» ,
«da» ,
«dos» ,
«das» ,
)) <
$result = » ;

foreach ( $delimiters as $delimiter ) <
# If string has a delimiter
if ( strstr ( $str , $delimiter )) <

$ucfirst = array();
# Apply ucfirst to every word
foreach ( explode ( $delimiter , mb_strtolower ( $str )) as $word ) <
$word = mb_convert_case ( $word , MB_CASE_TITLE );

# Working with exceptions
if ( in_array ( mb_strtoupper ( $word ), $exceptions )) <
$word = mb_strtoupper ( $word );
> elseif ( in_array ( mb_strtolower ( $word ), $exceptions )) <
$word = mb_strtolower ( $word );
> elseif ( preg_match ( ‘/^M<0,4>(CM|CD|D?C<0,3>)(XC|XL|L?X<0,3>)(IX|IV|V?I<0,3>)$/’ , mb_strtoupper ( $word ))) <
# Is roman numerals? # http://stackoverflow.com/a/267405/437459
$word = mb_strtoupper ( $word );
>

# string’s first character uppercased
$result = implode ( $delimiter , $ucfirst );
>
>

FPublisher

Web-технологии: База знаний

Документация PHP

ucwords

ucwords — Преобразует в верхний регистр первый символ каждого слова в строке

Описание

string ucwords ( string $str )

Возвращает строку string , в которой первый символ каждого слова переведен в верхний регистр, если этот символ буквенный.

Эта функция считает словами последовательности символов, разделенных пробелом, переводом строки, возвратом каретки, горизонтальной или вертикальной табуляцией.

Пример #1 Пример использования ucwords()

= ‘hello world!’ ;
$foo = ucwords ( $foo ); // Hello World!

$bar = ‘HELLO WORLD!’ ;
$bar = ucwords ( $bar ); // HELLO WORLD!
$bar = ucwords ( strtolower ( $bar )); // Hello World!
?>

Замечание: Эта функция безопасна для обработки данных в двоичной форме.

Верхний регистр — все первые символы в строке, кроме определенных слов

Это преобразует первый символ каждого слова в строке в UpperCase

Как я могу сделать то же самое, за исключением определенных слов

пример : new york branch 2 br property jbr

Должен отображать: New York Branch 2 br Property jbr

// br а также jbr исключены из обращения, но br в слове branch не зависит от исключения

Решение

1.Вы пытаетесь сделать это, сначала разбив строку на пустое место, например:

2. Теперь, используя для каждого цикла, вы можете сопоставить каждую строку и преобразовать ее в верхний регистр, если в ней нет таких слов, как br или jbr, и сохранить ее в массиве ex, $ array1 []

3. Затем снова преобразуйте $ array1 [] в строку, используя метод implode ().

UCWords не преобразования строки в верхний регистр для каждого слова

December 2020

5.2k раз

Использование PHP руководства по ucwords здесь я преобразовал мой PHP эхо.

Результаты по-прежнему в верхнем регистре, как это:

1 ответы

Вы должны сделать это:

В случае всех последних в верхний ucwords не делает никаких изменений дела. так что вам нужно , чтобы преобразовать строку в нижнем регистре первой.

Вы можете увидеть пример в ссылке , которая дана вам. Ссылка здесь .

Вы все слово в верхнем регистре, поэтому не работает.

ucwords Функция используется для преобразования первой буквы каждого слова в верхнем регистре строки. И если он находится в верхнем регистре уже тогда будет оставаться таким же. Он не будет работать на другую букву слова с секретным его в нижнем регистре.

Ucwords — Преобразует в верхний регистр первый символ каждого слова в строке

Помогите решить такую задачу!
есть переменная ($search) она выводит на сайте зоголовки (титлы) у меня возникла такая задача
если заголовок вида
(tree home)
то добавив функцию (ucwords)
вот исправно работующий пример для латиницы!

теперь в тит будет выводить вот так
(Tree Home)
делая заглавными первые буквы каждого слова, все это прекрасно работает так как мне нужно но только с латиницей, а вот
с кириллицей функция (ucwords) не хочет работать, и каждое слово остается с маленькой буквы

поиск в интернет помог найти вот такой код который будет работать и с кириллицей который я переделал под себя

но тут есть одна проблема, если заголовок который в базе данных вида (все слова с маленькой буквы)
то выводит в титле тогда так (Все слова с маленькой буквы) заменяя только первую букву на заглавную, а нужно чтобы вывадило
заглавными все слова в титл, вот так (Все Слова С Маленькой Буквы)

Пмогите пожалуйста решить эту проблему с этим кодом!

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL