|
| ereg - KUN de tegn jeg skriver. Fra : Anders Lund |
Dato : 12-09-04 15:46 |
|
Hej
Jeg er gået i gang med at validere alt hvad mine brugere kan indtaste på
en hjemmeside. Det er mere besværligt end jeg først havde regnet med.
Har i hvert fald ikke fået sporet mig ind til "systemet" endnu.
Under forsøgene finder jeg så ud af at nedenstående også virker, selv om
jeg prøver med "hej.dig" - som indeholder punktum, men det har jeg jo
ikke bedt om. Hvis der kun står ".", så kommer den dog ikke igennem.
ereg ("[a-zæøåA-ZÆØÅ]", $_POST["user"])
Hvordan får jeg den til kun at acceptere store og små bogstaver? Og hvad
så når jeg gerne vil have den til at acceptere . , - og mellemrum?
Kan nogen pege mig hvilket tegn man fodre den med så alle tegnene bliver
godtkendt, for alt hvad jeg har læst på php.net og googled mig frem til
siger det ikke. :(
--
Anders Lund - anders@andersonline.dk
| |
Peter Brodersen (12-09-2004)
| Kommentar Fra : Peter Brodersen |
Dato : 12-09-04 16:40 |
|
On Sun, 12 Sep 2004 16:46:24 +0200, Anders Lund
<anders@andersonline.dk> wrote:
>ereg ("[a-zæøåA-ZÆØÅ]", $_POST["user"])
>
>Hvordan får jeg den til kun at acceptere store og små bogstaver?
ereg ("[a-zæøåA-ZÆØÅ]", $_POST["user"])
... tjekker blot om ét af de tegn optræder et sted i strengen.
ereg ("^[a-zæøåA-ZÆØÅ]*$", $_POST["user"])
... tjekker at alle tegn fra start til slut skal være en del af den
klasse.
>Og hvad
>så når jeg gerne vil have den til at acceptere . , - og mellemrum?
ereg ("^[a-zæøåA-ZÆØÅ., -]*$", $_POST["user"])
Bemærk, at tegnet - for lethedens skyld bør være sidst i klassen, idet
det ellers angiver en mængde af tegn (fx som fra a-z)
--
- Peter Brodersen
Ugens sprogtip: terrasse (og terasse)
| |
Anders Lund (12-09-2004)
| Kommentar Fra : Anders Lund |
Dato : 12-09-04 17:44 |
|
Peter Brodersen wrote:
> ereg ("^[a-zæøåA-ZÆØÅ., -]*$", $_POST["user"])
>
> Bemærk, at tegnet - for lethedens skyld bør være sidst i klassen, idet
> det ellers angiver en mængde af tegn (fx som fra a-z)
Ahh.. jeg havde prøvet med ^ og $, men ikke sammen med *. Tak for
hjælpen - det bragte mig lidt tættere på målet.
Jeg synes at det meste af alt det jeg har fundet af hjælp, går ud fra at
man kender noget til regulære udtryk og derfor har jeg haft lidt svært
ved at fatte det.
Men det kommer nok. :)
--
Anders Lund - anders@andersonline.dk
| |
Peter Brodersen (12-09-2004)
| Kommentar Fra : Peter Brodersen |
Dato : 12-09-04 18:57 |
|
On Sun, 12 Sep 2004 18:44:11 +0200, Anders Lund
<anders@andersonline.dk> wrote:
>> ereg ("^[a-zæøåA-ZÆØÅ., -]*$", $_POST["user"])
>>
>> Bemærk, at tegnet - for lethedens skyld bør være sidst i klassen, idet
>> det ellers angiver en mængde af tegn (fx som fra a-z)
>Ahh.. jeg havde prøvet med ^ og $, men ikke sammen med *. Tak for
>hjælpen - det bragte mig lidt tættere på målet.
* angiver "0 eller flere af foregående tegn" (hvor tegnet her kan være
flere forskellige). Hvis du mindst vil have ét tegn, kan du fx bruge +
i stedet for *.
Hvis du vil have at user er mellem 4 og 8 tegn, kan du bruge {4,8} i
stedet for * eller +
* er bare en kort notation for {0,} og + er en kort notation for {1,}
(altså hhv. mindst 0 og 1 tegn)
>Jeg synes at det meste af alt det jeg har fundet af hjælp, går ud fra at
>man kender noget til regulære udtryk og derfor har jeg haft lidt svært
>ved at fatte det.
Regulære udtryk har en lidt hård indlæringskurve. I flere tilfælde
handler det ikke så meget om den præcise syntaks (altså hvad +, *, (),
[], ^, etc. betyder), men mere om at komme ind i en tankegang om
regulære udtryk.
Man kan vist sagtens finde en god del guides omkring syntaksen, men
vejledninger, der hjælper med at tilgå problemstillinger samt
hensigtsmæssig brug af regulære udtryk, er lidt mere sjældne.
Hvis du har penge og tid, kan bogen "Mastering Regular Expressions"
fra O'Reilly anbefales:
http://www.oreilly.com/catalog/regex/
http://www.oreilly.com/catalog/regex2/
Den baserer sig på at lære læseren om regulære udtryk, i stedet for
blot at være et opslagsværk.
--
- Peter Brodersen
Ugens sprogtip: terrasse (og terasse)
| |
Anders Lund (12-09-2004)
| Kommentar Fra : Anders Lund |
Dato : 12-09-04 19:36 |
|
Peter Brodersen wrote:
> Hvis du har penge og tid, kan bogen "Mastering Regular Expressions"
> fra O'Reilly anbefales:
> http://www.oreilly.com/catalog/regex/
> http://www.oreilly.com/catalog/regex2/
> Den baserer sig på at lære læseren om regulære udtryk, i stedet for
> blot at være et opslagsværk.
Jeg har faktisk kigget kort på den og måske skulle jeg købe den. Er der
kan sige hvor man kan finde bogen i Danmark?
--
Anders Lund - anders@andersonline.dk
| |
Jacob Atzen (12-09-2004)
| Kommentar Fra : Jacob Atzen |
Dato : 12-09-04 21:55 |
|
Anders Lund <anders@andersonline.dk> writes:
> Peter Brodersen wrote:
>
> > Hvis du har penge og tid, kan bogen "Mastering Regular Expressions"
> > fra O'Reilly anbefales:
>
> Jeg har faktisk kigget kort på den og måske skulle jeg købe den. Er
> der kan sige hvor man kan finde bogen i Danmark?
Universitetsbogladen på Københavns Universitet har den tilsyneladende.
< http://universitetsbogladen.dk>
--
Med venlig hilsen
- Jacob Atzen
| |
Anders Lund (12-09-2004)
| Kommentar Fra : Anders Lund |
Dato : 12-09-04 22:07 |
|
Jacob Atzen wrote:
> Universitetsbogladen på Københavns Universitet har den tilsyneladende.
Av - 415 kr. Hvis jeg nu køber den via Amazon.co.uk, så bliver det uden
moms, ikke? Så kan jeg også købe en "Regular Expression Pocket
Reference" med, hvor de tilsammen koster små 300 kr. Og så lige noget
transport oven i, så tror jeg stadig at jeg spare nogle penge.
Så skulle jeg måske tage nogle flere ting med. :)
--
Anders Lund - anders@andersonline.dk
| |
Jacob Atzen (12-09-2004)
| Kommentar Fra : Jacob Atzen |
Dato : 12-09-04 22:32 |
|
Anders Lund <anders@andersonline.dk> writes:
> Av - 415 kr. Hvis jeg nu køber den via Amazon.co.uk, så bliver det
> uden moms, ikke? Så kan jeg også købe en "Regular Expression Pocket
> Reference" med, hvor de tilsammen koster små 300 kr. Og så lige
> noget transport oven i, så tror jeg stadig at jeg spare nogle penge.
Ja, det er ikke billigt at købe computer litteratur i Danmark :-/
Amazon i England lægger dansk bogmoms (25%) oveni listeprisen, så nej,
du slipper ikke for dansk moms ved at købe hos Amazon. Det gør du til
gengæld hos de fleste (alle?) andre europæiske boghandler.
--
Med venlig hilsen
- Jacob Atzen
| |
Kim Emax (15-09-2004)
| Kommentar Fra : Kim Emax |
Dato : 15-09-04 22:41 |
|
Anders Lund wrote:
> Av - 415 kr. Hvis jeg nu køber den via Amazon.co.uk, så bliver det
> uden moms, ikke? Så kan jeg også købe en "Regular Expression Pocket
> Reference" med, hvor de tilsammen koster små 300 kr. Og så lige noget
> transport oven i, så tror jeg stadig at jeg spare nogle penge.
Pocket udgaven er ikke megen bevendt, hvis ikke du _er_ inde i de udtryk,
det er et rent opslagsværk. Men selvom "Mastering..." er lidt dyr(troede den
var billigere) er den hver en klejne værd!
--
Take Care
Kim Emax - master|minds - Vi tænker IT for dig...
http://www.masterminds.dk - http://www.emax.dk
| |
Kristian Thy (12-09-2004)
| Kommentar Fra : Kristian Thy |
Dato : 12-09-04 21:10 |
| | |
Peter Brodersen (12-09-2004)
| Kommentar Fra : Peter Brodersen |
Dato : 12-09-04 22:09 |
|
On 12 Sep 2004 20:10:04 GMT, Kristian Thy <thy@it.edu> wrote:
>> Bemærk, at tegnet - for lethedens skyld bør være sidst i klassen, idet
>> det ellers angiver en mængde af tegn (fx som fra a-z)
>For lethedens skyld? Det er skam ganske obligatorisk.
Dårlig formulering fra min side, ja. Nogle gange sker det, at jeg
havetraktor et ord i stedet for et andet.
--
- Peter Brodersen
Ugens sprogtip: terrasse (og terasse)
| |
Kim Emax (15-09-2004)
| Kommentar Fra : Kim Emax |
Dato : 15-09-04 22:42 |
|
Kristian Thy wrote:
>> Bemærk, at tegnet - for lethedens skyld bør være sidst i klassen,
>> idet det ellers angiver en mængde af tegn (fx som fra a-z)
>
> For lethedens skyld? Det er skam ganske obligatorisk.
Nå?
ereg("[a-z\-0-9]", $test);
--
Take Care
Kim Emax - master|minds - Vi tænker IT for dig...
http://www.masterminds.dk - http://www.emax.dk
| |
Peter Brodersen (15-09-2004)
| Kommentar Fra : Peter Brodersen |
Dato : 15-09-04 23:02 |
|
On Wed, 15 Sep 2004 23:41:48 +0200, "Kim Emax"
<newsgroup@remove-emax.dk> wrote:
>ereg("[a-z\-0-9]", $test);
Warning: ereg(): REG_ERANGE in ...
--
- Peter Brodersen
Ugens sprogtip: terrasse (og ikke terasse)
| |
Kim Emax (16-09-2004)
| Kommentar Fra : Kim Emax |
Dato : 16-09-04 21:38 |
|
Peter Brodersen wrote:
>> ereg("[a-z\-0-9]", $test);
>
> Warning: ereg(): REG_ERANGE in ...
Wierd, det er jeg stensikker på at jeg har brugt med succes tidligere...men
jeg kan se at jeg er forkert på den...
--
Take Care
Kim Emax - master|minds - Vi tænker IT for dig...
http://www.masterminds.dk - http://www.emax.dk
| |
Kristian Thy (15-09-2004)
| Kommentar Fra : Kristian Thy |
Dato : 15-09-04 23:13 |
|
Kim Emax uttered:
> Kristian Thy wrote:
>>> Bemærk, at tegnet - for lethedens skyld bør være sidst i klassen,
>>> idet det ellers angiver en mængde af tegn (fx som fra a-z)
>>
>> For lethedens skyld? Det er skam ganske obligatorisk.
>
> Nå?
Ja.
> ereg("[a-z\-0-9]", $test);
Ja, det giver ikke nogen syntaksfejl. Men er du sikker på at den
returner det du regner med?
ereg() bruger POSIX regexp's. Vi citerer fra man 7 regex:
To include a literal `-', make it the first or
last character, or the second endpoint of a range.
QED. For nu yderligere at pille dit eksempel fra hinanden citerer vi:
An atom is [...] a `\' followed by one of the
characters `^.[$()|*+?{\' (matching that character
taken as an ordinary character), a `\' followed by
any other character(!) (matching that character
taken as an ordinary character, as if the `\' had
not been present(!)) [...]
Dvs. at tegnene ^.[$()|*+?{\ skal escapes med \, alle andre tegn er den
ligegyldig ved. Vi kan så omskrive din regexp:
[a-z\-0-9] => [a-z-0-9]
Hvad siger manualen så om den slags? Jo,
It is illegal(!) for two ranges to share an
endpoint, e.g. `a-c-e'.
Det er altså ulovligt, og du kan regne med at få besøg af php-politiet
snarest.
(Der var i øvrigt nogen der skulle fortælle ham der har skrevet
man-siden at det er pænt træls med alle de (!) han har strøet ud over
siden...)
\\kristian
--
http://lpf.ai.mit.edu/Patents/knuth-to-pto.txt
http://home.att.net/~jbcole/humor/Microsoft_patents.htm
| |
Kim Emax (16-09-2004)
| Kommentar Fra : Kim Emax |
Dato : 16-09-04 21:44 |
|
Kristian Thy wrote:
>> ereg("[a-z\-0-9]", $test);
>
> Ja, det giver ikke nogen syntaksfejl. Men er du sikker på at den
> returner det du regner med?
Jeg tester som regel stuff inden jeg smider en besked her, og jeg var
stensikker på at jeg har brugt med succes tidligere...men jeg har
efterfølgende testet det og kan se at jeg er forkert på den... altså at der
kommer en warning og det giver ikke, hvad jeg forventer... så jeg bøjer mig
i støvet og siger undskyld for min post og irriterer mig over at jeg
droppede den smiley jeg ellers havde sat på...
Desuden undrer jeg mig over, hvorfor en udkommentering af - ikke virker?
Tænk, hvis man også skulle smide * ? [ ] . ^ $ og andre i enden af det
regulære udtryk, fordi man ikke kunne escape det? Det virker sgu lidt
underligt? I hvert fald ikke konsekvent!
--
Take Care
Kim Emax - master|minds - Vi tænker IT for dig...
http://www.masterminds.dk - http://www.emax.dk
| |
Kristian Thy (16-09-2004)
| Kommentar Fra : Kristian Thy |
Dato : 16-09-04 23:21 |
|
Kim Emax uttered:
> [...] så jeg bøjer mig
> i støvet og siger undskyld for min post og irriterer mig over at jeg
> droppede den smiley jeg ellers havde sat på...
Jeg havde nok skrevet det samme alligevel
> Desuden undrer jeg mig over, hvorfor en udkommentering af - ikke virker?
> Tænk, hvis man også skulle smide * ? [ ] . ^ $ og andre i enden af det
> regulære udtryk, fordi man ikke kunne escape det? Det virker sgu lidt
> underligt? I hvert fald ikke konsekvent!
Du blander to forskellige ting sammen. - skal stå til sidst (eller
først, eller som endepunkt for en range¹). Ydermere skal - * ? [ ] . og
andre ikke escapes, hvis de står inde i en [].
Catchen her er at alle specialtegnene har forskellig betydning alt efter
om de står indeni eller udenfor kantede paranteser.
.. matcher alle tegn
[.] matcher kun punktum
¹) dvs at [z--a] fx er veldefineret som "alle tegn fra z til - samt a".
\\kristian
--
http://lpf.ai.mit.edu/Patents/knuth-to-pto.txt
http://home.att.net/~jbcole/humor/Microsoft_patents.htm
| |
Jonathan Holst (17-09-2004)
| Kommentar Fra : Jonathan Holst |
Dato : 17-09-04 15:24 |
|
Kristian Thy wrote:
> først, eller som endepunkt for en range¹). Ydermere skal - * ? [ ] . og
> andre ikke escapes, hvis de står inde i en [].
>
Erhm.. Kan godt være jeg er helt galt afmarcheret, men [ og ] skal da
escapes? '[a-z]]' er jo ikke noget helt legalt match.
--
Jonathan Holst - http://holst.biz/
"Black holes is where God divided by zero"
| |
Peter Brodersen (17-09-2004)
| Kommentar Fra : Peter Brodersen |
Dato : 17-09-04 15:32 |
|
On Fri, 17 Sep 2004 16:24:25 +0200, Jonathan Holst <jholst@gmail.com>
wrote:
>Erhm.. Kan godt være jeg er helt galt afmarcheret, men [ og ] skal da
>escapes? '[a-z]]' er jo ikke noget helt legalt match.
[a-z]] betyder et tegn mellem a-z, og så ]-tegnet.
[]a-z] virker derimod som forventet, viser en ereg-test.
(et tegn, der enten er ] eller mellem a-z)
--
- Peter Brodersen
Ugens sprogtip: terrasse (og ikke terasse)
| |
Kristian Thy (17-09-2004)
| Kommentar Fra : Kristian Thy |
Dato : 17-09-04 15:57 |
|
Peter Brodersen uttered:
> On Fri, 17 Sep 2004 16:24:25 +0200, Jonathan Holst <jholst@gmail.com>
> wrote:
>
>>Erhm.. Kan godt være jeg er helt galt afmarcheret, men [ og ] skal da
>>escapes? '[a-z]]' er jo ikke noget helt legalt match.
>
> [a-z]] betyder et tegn mellem a-z, og så ]-tegnet.
>
> []a-z] virker derimod som forventet, viser en ereg-test.
> (et tegn, der enten er ] eller mellem a-z)
Fandt lige den relevante særregel:
"To include a literal `]' in the list, make it the first
character (following a possible `^')."
\\kristian
--
http://lpf.ai.mit.edu/Patents/knuth-to-pto.txt
http://home.att.net/~jbcole/humor/Microsoft_patents.htm
| |
|
|