Altijd userinput checkenquote:Op zondag 2 oktober 2005 13:00 schreef SuperRembo het volgende:
[..]
Als je hier nou meteen naar het juiste topic had gelinkt, dan had ik 'm meteen gesnapt.
Vanavond weer eens kijken, maar 66 tekens is echt bizar weinig.quote:Op zondag 2 oktober 2005 13:18 schreef SuperRembo het volgende:
Ik zit nu op 9177 tekens met een preg_replace, 103102 tekens met een loop.
Nog een flinke weg te gaan naar de 66 (of minder tekens)
Dan moet er wel weer een ; achter. Dan zit ik nu op 67.quote:Op zondag 2 oktober 2005 15:31 schreef Swetsenegger het volgende:
[..]
Vanavond weer eens kijken, maar 66 tekens is echt bizar weinig.
niet vergeten dat je de laatste ?> mag weglaten he
Dat zal ik maar doen.quote:Op zondag 2 oktober 2005 15:38 schreef SuperRembo het volgende:
[..]
Dan moet er wel weer een ; achter. Dan zit ik nu op 67.
63!
Zal dan maar ff reggen op dat forum
notices staan standaard uit, en is dus geldigquote:Op zondag 2 oktober 2005 15:43 schreef SuperRembo het volgende:
Ik krijg wel 2 + (aantal niet-spaties) notices
Maar dat lukt me niet, en deze:quote:Replacement may contain references of the form \\n or (since PHP 4.0.4) $n, with the latter form being the preferred one. Every such reference will be replaced by the text captured by the n'th parenthesized pattern. n can be from 0 to 99, and \\0 or $0 refers to the text matched by the whole pattern. Opening parentheses are counted from left to right (starting from 1) to obtain the number of the capturing subpattern.
Zal toch ook enig lucht moeten geven in het aantal gebruikte karakters.quote:The precise effect of "\cx" is as follows: if "x" is a lower case letter, it is converted to upper case. Then bit 6 of the character (hex 40) is inverted. Thus "\cz" becomes hex 1A, but "\c{" becomes hex 3B, while "\c;" becomes hex 7B.
1 2 3 | $a=$_POST['string'];for($b=0;$b<strlen($a);$b++){$c=ord(substr($a,$b,1)); if($c!=32){$e++;$g=($e%2!=0)?(($c<91)?chr($c):chr($c-32)):(($c<91)?chr($c+32): chr($c));$f.=$g;}else{$f.=" ";}}echo $f; |
1 2 3 | $a=$_POST['string'];for($b=0;$b<strlen($a);$b++){$c=substr($a,$b,1); if($c!=" "){$d.=($e%2==0)?strtoupper($c):strtolower($c);$e++;}else $d.=" ";} echo $d; |
Ik ben er ook niet goed in, maar je leert er wel een hoop handiheidjes meequote:Op zondag 2 oktober 2005 18:14 schreef Nevermind het volgende:
Dankje, de accollades had ik ook net bedacht, en daarmee kom ik op 133. Nu verder met ? :
Erg leuk om te doen trouwens, ook al ben ik er niet erg goed in
-edit- 124
quote:Op zondag 2 oktober 2005 17:54 schreef SuperRembo het volgende:
In plaats van $c=substr($a,$b,1) zou je $c=$a{$b} kunnen gebruiken.
Inderdaad, bedankt voor de tip trouwensquote:Op zondag 2 oktober 2005 18:18 schreef Swetsenegger het volgende:
[..]
Ik ben er ook niet goed in, maar je leert er wel een hoop handiheidjes mee
De verkorte if notatie bijvoorbeeld
1 2 | $a=$_POST[string];for($c=0;$c<strlen($a);print($a{$c}!=" " ?$c%2==0?strtoupper($a{$c}):strtolower($a{$c}):" "),$c++); |
klopt, met print kan je het resultaat van een functie printen, met echo nietquote:Op zondag 2 oktober 2005 19:20 schreef Nevermind het volgende:
Ik kwam er achter dat je in for-loops ook direct resultaat kan teruggeven, weer wat geleerd. Daarmee kom ik op
[ code verwijderd ]
Nog steeds veel te veel, maar het is weer een paar tekens minder
Maar als ik het goed begrijp kun je alleen het print-commando gebruiken? Zelfs echo werkt niet.
Maar je doet '& 0', dus ik mag aannemen dat $c een integer is? Of is het een character?quote:Op zondag 2 oktober 2005 19:27 schreef Swetsenegger het volgende:
[..]
Ongeacht de waarde van $c geeft hij dus altijd 0 terug (en met chr() dus een spatie)
Ik wil niet vervelden doen, maar klopt je output wel? Je moet wel rekening houden met de spaties.quote:Op zondag 2 oktober 2005 19:20 schreef Nevermind het volgende:
Ik kwam er achter dat je in for-loops ook direct resultaat kan teruggeven, weer wat geleerd. Daarmee kom ik op
[ code verwijderd ]
Nog steeds veel te veel, maar het is weer een paar tekens minder
Maar als ik het goed begrijp kun je alleen het print-commando gebruiken? Zelfs echo werkt niet.
1 2 3 | input = "PHPFreakz heeft een community" output = "PhPfReAkZ hEeFt EeN cOmMuNiTy" // Goed output = "PhPfReAkZ HeEfT EeN CoMmUnItY" // Fout |
$c & 0 is altijd 0, net als $c and false altijd false is.quote:Op zondag 2 oktober 2005 19:27 schreef Swetsenegger het volgende:
[..]
Ongeacht de waarde van $c geeft hij dus altijd 0 terug (en met chr() dus een spatie)
hoe moet ik dan AND'ten met 0quote:Op zondag 2 oktober 2005 19:32 schreef SuperRembo het volgende:
[..]
$c & 0 is altijd 0, net als $c and false altijd false is.
Die bitwise operaties werken ook met tekens, maar dan moet je wel aan beide kanten een character gebruiken. Dat het verschil tussen hoofdletter en kleine letter altijd een spatie is, dat veronderstel ik bekendquote:Op zondag 2 oktober 2005 19:28 schreef Swetsenegger het volgende:
[..]
klopt, met print kan je het resultaat van een functie printen, met echo niet
en je kan die strtolower en strtoupper nog vervangen door een bitwise operatie. Hoewel dat bij tot op heden nog niet lukt
Ja ik vat 'm nu, moet dus $c=$c&' ' zijn.quote:Op zondag 2 oktober 2005 19:35 schreef Light het volgende:
[..]
Er zit verschil tussen 'a' & 0 en 'a' & '0'.
1 2 3 | <?php $a=strtolower($_POST[string]);$a=preg_replace('/\w\s?\w?/e','ucfirst("$0")',$a); ?> |
Hij doet het niet.quote:Op zondag 2 oktober 2005 19:41 schreef JeRa het volgende:
[ code verwijderd ]
Verder dan dat kom ik op het moment niet. 84 tekens inclusief <? en ?>
1 2 3 | <?php $a=strtolower($_POST[string]);echo preg_replace('/\w\s?\w?/e','ucfirst("$0")',$a); ?> |
Maak er danquote:
1 | <?=preg_replace('/\w\s?\w?/e','ucfirst("$0")',strtolower($_POST[string])); |
In mijn afgunst van die constructie was ik 'm gewoon helemaal vergetenquote:Op zondag 2 oktober 2005 19:51 schreef Nevermind het volgende:
[..]
Maak er dan
[ code verwijderd ]
van, heb je 74
Case insensitive maken is makkelijk (i-modifier), maar de bron lowercase maken is een ander verhaalquote:Op zondag 2 oktober 2005 19:56 schreef Nevermind het volgende:
Kun je niet iets toevoegen aan de pattern zodat ie case insensitive wordt en je het "strtolower"-stukje weg kan laten?
case insensitive preg_replace is geen probleem (ipv /e wordt het /ie), maar... wat doe je dan als de input een hoofdletter is en het een kleine letter moet worden?quote:Op zondag 2 oktober 2005 19:56 schreef Nevermind het volgende:
Kun je niet iets toevoegen aan de pattern zodat ie case insensitive wordt en je het "strtolower"-stukje weg kan laten?
quote:Op zondag 2 oktober 2005 19:57 schreef Swetsenegger het volgende:
ucfirst maakt van het eerste karakter van een string een hoofdletter.
Ik begrijp je regexp niet
1 | \w\s?\w? |
Je hebt gelijk, ik zat even mee te denken, maar ik heb veel te weinig ervaring met regexp om iets zinnigs toe te voegenquote:Op zondag 2 oktober 2005 19:58 schreef Swetsenegger het volgende:
[..]
case insensitive preg_replace is geen probleem (ipv /e wordt het /ie), maar... wat doe je dan als de input een hoofdletter is en het een kleine letter moet worden?
Ach fuck, natuurlijk. ? is 0 of 1, dus je $0 wordt letter+letter of letter+spatie+letter, waarbij de eerste van $0 hoofdletter wordtquote:Op zondag 2 oktober 2005 19:59 schreef JeRa het volgende:
[..]
[ code verwijderd ]
Woord-karakter, eventuele whitespace, eventueel woord-karakter.
Deze string matched ie telkens (2 bij 2, bij een spatie 3, bij het laatste teken eventueel 1) en dan maakt ie van het eerste teken een uppercase
Dus:
blaat blaat blaat
Maar het is kennelijk niet dé oplossingquote:Op zondag 2 oktober 2005 20:01 schreef Swetsenegger het volgende:
[..]
Ach fuck, natuurlijk. ? is 0 of 1, dus je $0 wordt letter+letter of letter+spatie+letter, waarbij de eerste van $0 hoofdletter wordtDeze zocht ik al.
Die wil ik ook wel zienquote:
1 | <?=preg_replace('/\w/e','++$u%2?$0&~" ":$0|" "',$_POST[string]); |
Hmmm, ja. Heb 'm weer weggehaald. Had niet verwacht dat dat zo snel gevonden zou wordenquote:Op zondag 2 oktober 2005 20:07 schreef JeRa het volgende:
SuperRembo, klopt het dat jouw code op je site staat?
Hele mooie oplossing, maar daar kunnen er nog 3 vanafquote:Op zondag 2 oktober 2005 20:06 schreef Light het volgende:
[ code verwijderd ]
Ik heb er nog 65 van weten te maken
quote:Op zondag 2 oktober 2005 20:06 schreef Light het volgende:
[ code verwijderd ]
Ik heb er nog 65 van weten te maken
1 | '++$u%2?$0&~" ":$0|" "' |
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |