/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
Javascript propercase æøå (rexexp)
Fra : Leif Neland


Dato : 08-02-07 23:20

x-postet til perl, da det jo også er et regexp-problem
Fut: dk.edb.internet.webdesign.clientside

Jeg fandt denne smarte kodebid, der laver den rigtige case (Stort
begyndelsesbogstav, resten småt)

String.prototype.toProperCase = function(){
return this.toLowerCase().replace(/\w+/g,function(s){
return s.charAt(0).toUpperCase() + s.substr(1);
})
}

Den kan f.ex benyttes i en onChange:
onchange='this.value=this.value.toProperCase()'

Det kan lave "jeNs HANSen" om til "Jens Hansen"

Men æøå opfattes af \w ikke som et bogstav, så "nørrebyøster" bliver til
"NøRrebyøSter"

Kan man lære \w æøå?

Jeg bruger nu /\S+/g i stedet.

Men kan man "trække cifre fra \S", så der bliver store bogstaver efter tal,
"Bygade 1A"?




 
 
Peter Mogensen (08-02-2007)
Kommentar
Fra : Peter Mogensen


Dato : 08-02-07 23:45

Leif Neland wrote:
> x-postet til perl, da det jo også er et regexp-problem
> Fut: dk.edb.internet.webdesign.clientside

Med mindre der er tale om en perl-kompatible regexp implementation, så
er det ikke et Perl-spørgsmål.


> Kan man lære \w æøå?

Ja Perl \w forstår æøå.
Men iøvrigt, så kræver det jo også at din toUpperCase() forstår det.
Ergo... ikke et Perl spørgmål.

> Men kan man "trække cifre fra \S", så der bliver store bogstaver efter tal,
> "Bygade 1A"?

Nu er det jo ikke et Perl-spørgsmål, men en Perl-programmør ville nok
overveje at anvende [:alpha:] eller \p{IsAlpha} til at matche bogstaver,
der står efter et ikke-bogstav.

Peter

Michael Zedeler (10-02-2007)
Kommentar
Fra : Michael Zedeler


Dato : 10-02-07 23:17

Leif Neland skrev:
> x-postet til perl, da det jo også er et regexp-problem
> Fut: dk.edb.internet.webdesign.clientside
>
> Jeg fandt denne smarte kodebid, der laver den rigtige case (Stort
> begyndelsesbogstav, resten småt)
>
> String.prototype.toProperCase = function(){
> return this.toLowerCase().replace(/\w+/g,function(s){
> return s.charAt(0).toUpperCase() + s.substr(1);
> })
> }
>
> Den kan f.ex benyttes i en onChange:
> onchange='this.value=this.value.toProperCase()'
>
> Det kan lave "jeNs HANSen" om til "Jens Hansen"
>
> Men æøå opfattes af \w ikke som et bogstav, så "nørrebyøster" bliver til
> "NøRrebyøSter"
>
> Kan man lære \w æøå?

Nej. Generelt er de prædefinerede klasser en kende problematiske ift.
sjove tegn.

> Jeg bruger nu /\S+/g i stedet.
>
> Men kan man "trække cifre fra \S", så der bliver store bogstaver efter tal,
> "Bygade 1A"?

Du kan bare bruge din egen klasse, f. eks. [[:alpha:]æøå] eller
[[:alnum:]æøå].

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
I am less likely to answer usenet postings by anonymous authors.
Visit my home page at http://michael.zedeler.dk/

Lasse Reichstein Nie~ (12-02-2007)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 12-02-07 08:46

"Leif Neland" <leif@neland.dk> writes:

> x-postet til perl, da det jo også er et regexp-problem
> Fut: dk.edb.internet.webdesign.clientside

Så kunne jeg forstå en krydspost til en regexp-gruppe, men
Perl-gruppen er altså om perl, ikke vilkårlige features det
har tilfælles med tilfældige andre sprog.

> String.prototype.toProperCase = function(){
> return this.toLowerCase().replace(/\w+/g,function(s){
> return s.charAt(0).toUpperCase() + s.substr(1);
> })
> }
....
> Men æøå opfattes af \w ikke som et bogstav, så "nørrebyøster" bliver til
> "NøRrebyøSter"
>
> Kan man lære \w æøå?

Nej, men man kan skrive det så det matcher det du vil have:

function capitalize(string){
return string.toLowerCase().replace(/[a-zæøå]+/g, function(s){
return s.charAt(0).toUpperCase() + s.substr(1);
})
}

og så:
onchange="this.value=capitalize(this.value);"

(jeg synes ikke det er pænt at pille for meget ved de indbyggede
prototyper, så jeg foretrækker at have funktionen for sig selv).

> Jeg bruger nu /\S+/g i stedet.

Massivt overkill. Matcher alt der ikke er mellemrum, også fx punktummer.

> Men kan man "trække cifre fra \S", så der bliver store bogstaver efter tal,
> "Bygade 1A"?

Se ovenfor.

På den anden side er der nogle ord der ikke skal kapitaliseres.
Hvis jeg indtaster "Nørregade 24 2.tv", så skal "tv" ikke blive "Tv".

/L "Pas på, du får hvad du beder om"
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste