webForumDet fria alternativet

Capitalize!

6 svar · 415 visningar · startad av oskars

oskarsMedlem sedan nov. 20051 263 inlägg
#1

Tjenare!

Jag har sökt på google efter "Javascript Capitalize" och där fick jag fram flera förslag på funktioner, men eftersom mina javascriptkunskaper eg. endast kan mätas med decilitermått så behöver jag ändå hjälp!

Som den här funktionen t.ex:
http://www.mediacollege.com/internet/javascript/text/case-capitalize.html

Måste man ha en så "stor" funktion för en, i mina ögon, relativt enkel grej?

Och grejen är att jag vill göra detta ungefär så här:

function writeText {

   var minText = "oskar"

   blabla.blabla.value = capitalize(minText)

}

Jag kommer vilja göra så här på mer än 10st ställen i koden, så jag behöver ett smidigt sätt för det...

Hoppas någon pallar att hjälpa mig :)

Oskar

colioneMedlem sedan juni 20013 386 inlägg
#2
String.prototype.capitalizeFirst=function() {
	var a=this.split(' ')
	for (var n=0; n<a.length; n++) {
		a[n]=a[n].substring(0,1).toUpperCase().concat(a[n].substring(1,a[n].length).toLowerCase())
	}
return a.join(' ')
}

Anropas via:

"en sträng".capitalizeFirst()

Strängen kan lagras i en variabel, typ:

strStr="Min sträng"
blabla.blabla.value=strStr.capitalizeFirst()
oskarsMedlem sedan nov. 20051 263 inlägg
#3

Grymt! Mycket fin lösning! Guldstjärna!

Tack :)

spangoMedlem sedan juni 20006 147 inlägg
#4

Nu är förstås frågan redan löst men jag vill ändå presentera en kortare lösning som jobbar med ordgränser (inklusive radbrytningar, skiljetecken etc.) i stället för bara mellanslag :)

String.prototype.capitalize = function () {
    return this.replace(/[a-zåäö]+/ig, function (s) {return s.charAt(0).toUpperCase() + s.substring(1).toLowerCase();});
}
alert("hej alla!".capitalize());

red. ÅÄÖ räknas visst som ordgränser...

colioneMedlem sedan juni 20013 386 inlägg
#5

Och om du fortfarande vill anropa spangos kortare lösning genom att använda:

sträng.Metod()

istället för metod(sträng)

kan vi skriva om den som:

Använd inte denna, använd spangos.

anropas med

sträng.capWords()

Det vi gör genom att använda String.prototype.namn

är att lägga till en ny metod till javscripts inbyggda strängobjekt så den blir åtkomlig på samma sätt som

sträng.toUpperCase()

vilken redan är inbyggd i string-objektet. Självklart är det personligt vilken man föredrar, men jag gillar att augmentera (lägga på metoder/funktioner) objekten

/red Nu han spango editera sitt inlägg innan jag han posta mitt.. :p

spangoMedlem sedan juni 20006 147 inlägg
#6

colione skrev:

/red Nu han spango editera sitt inlägg innan jag han posta mitt.. :p

Bara för att jävlas med dig :p och för att det är mycket snyggare, såklart.
Rättade även en bugg som ställde till elände med svenska tecken. (Jag drömmer om ett regexp-bibliotek där icke-ASCII inte strular.)

TravoniMedlem sedan okt. 20041 538 inlägg
#7

alert("nils-oskar pettersson".capitalize());
Nils-Oskar Pettersson

alert("nils-oskar pettersson".capitalizeFirst());
Nils-oskar Pettersson

133 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
130 ms — hämta tråd, inlägg och bilagor (db)