Capitalize first letter of each word of input
CJam, 15 13 bytes
Lq{_eu?_S-}/;
Try it online in the CJam interpreter.
Pseudocode
L e# B := ""
q e# Q := input()
{ }/ e# for C in Q:
_eu? e# C := B ? C : uppercase(C)
_S- e# B := string(C).strip(" ")
; e# discard(B)
All modified characters C are left on the stack and, therefore, printed when exiting.
CSS 2.1, 49
:after{content:attr(t);text-transform:capitalize}
Explanation:
- The
attr
function takes the input from at
(text) HTML attribute. - The input is capitalized by setting
text-transform
tocapitalize
. - The output is provided as a generated content, using the
content
property on an::after
pseudo-element.
Runnable snippet:
:after {
content: attr(t);
text-transform: capitalize;
}
<div t="eCommerce rocks. crazyCamelCase stuff. _those pigeon-toed shennanigans. Fiery trailblazing 345 thirty-two Roger. The quick brown fox jumped over the lazy dogs. Clancy Brown would have been cool as Lex Luthor. good_bye"></div>
Note: CSS 2.1 specified the desired behavior: capitalize
uppercased the first character of each word. However, CSS3 uppercases first typographic letter unit of each word. So the snippet above won't work properly neither on old IE, which didn't follow CSS 2.1; nor on new compliant browsers which follow CSS3.
Javascript (ES6), 77 bytes
alert(prompt().split(' ').map(x=>x&&x[0].toUpperCase()+x.slice(1)).join(' '))
Commented
alert( // output
prompt(). // take input
split(' '). // split by spaces
map(x=> // map function to array
x && // if x, empty string "" is falsey and returns itself
x[0].toUpperCase() + x.slice(1) // capaitalize 1st char and concatenate the rest
).
join(' ') // join array with spaces
)