[VBScript ] na een underscore geen uppercase

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • deandoe
  • Registratie: September 2005
  • Laatst online: 28-07-2020
Ik gebruik de volgende code om een string te "proper case" (iedere eerste letter wordt een hoofdletter) het werkt prima. Zodra er echter een _ underscore voor een letter of woord staat gaat het mis. Ik heb b.t.w. echt alle speciale karakters geprobeert de _ underscore is de enige.

Waarom gaat het bij een _ underscore mis? Is er een oplossing voor, anders dan mijn huidige (ik vervang nu eerst alle _ underscores)? Ik hoef geen kant en klare oplossing maar een indicatie van het probleem zou ik fijn vinden. Ligt het aan het pattern (kan ik me niet voorstellen) of is dit een glitch in VBScrtip o.i.d.?


code:
1
2
3
4
5
6
7
8
9
strIn = "?test,test.test/test_test"
...
strOut = "?Test,Test.Test/Test_test"
...
.Pattern = "\b([a-z])"
...
Function ProperCase(match, submatch1, index, source)
ProperCase = UCase(submatch1) 
End Function


Als jullie een volledige code nodig hebben geef het maar even aan. De belangrijkste onderdelen staan er volgens mij wel in.

Acties:
  • 0 Henk 'm!

  • Kalentum
  • Registratie: Juni 2004
  • Laatst online: 12:32
Die \b matcht met word boundaries en een word is alles wat bestaat uit [A-Za-z0-9_] dus inclusief underscores. Hierdoor wordt "test_test" als 1 woord gezien. Je zou het pattern kunnen vervangen door bv '[^a-z]([a-z]{1})' ofzo. Deze patterns werken overigens niet met diacritische tekens!

Acties:
  • 0 Henk 'm!

Verwijderd

Hoe zou je die underscore dan willen zien? je zou namelijk eerst kunnen kijken of de eerste letter een underscore is (een kleine if/else):
Ja: vervang met wat jij wilt of doe er niks mee
Nee: voer de ProperCase function uit

Acties:
  • 0 Henk 'm!

  • deandoe
  • Registratie: September 2005
  • Laatst online: 28-07-2020
rutgerw schreef op zaterdag 21 februari 2009 @ 12:55:
Die \b matcht met word boundaries en een word is alles wat bestaat uit [A-Za-z0-9_] dus inclusief underscores. Hierdoor wordt "test_test" als 1 woord gezien. Je zou het pattern kunnen vervangen door bv '[^a-z]([a-z]{1})' ofzo. Deze patterns werken overigens niet met diacritische tekens!
Dank, toch vreemd mijn eerste constructie was \b \w maar omdat er bij de \w expliciet staat aangegeven dat de underscore in het karakterset betrokken is was mijn redenatie; deze moet ik uitsluiten. Vervolgens koos ik dus voor [a-z] omdat hier niet staat dat de underscore in het karakterset zit (en wel bijv. bij \w)...

Zou dit dan betekenen dat [a-z] = [a-z_]?
Verwijderd schreef op zaterdag 21 februari 2009 @ 13:33:
Hoe zou je die underscore dan willen zien?
Het liefst dus als een speciaal karakter en niet als een karakter dat wordt gezien als "woord" (wat natuurlijk ook logisch is gezien het alfabet geen underscore bevat...) Bovendien, een mogelijkheid om de underscore te zien als onderdeel van het alfabet (of niet) is er ook niet... Vreemd?
Verwijderd schreef op zaterdag 21 februari 2009 @ 13:33:
je zou namelijk eerst kunnen kijken of de eerste letter een underscore is (een kleine if/else):
Ja: vervang met wat jij wilt of doe er niks mee
Nee: voer de ProperCase function uit
Ik snap je suggestie, om toch even kritisch te zijn stel je hebt de volgende string: __test__.__#__test dan missen we toch helemaal het punt waar regular expressions goed voor zijn?

[ Voor 35% gewijzigd door deandoe op 21-02-2009 18:43 ]