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

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
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 uttered:
> 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.

\\kristian
--
http://lpf.ai.mit.edu/Patents/knuth-to-pto.txt
http://home.att.net/~jbcole/humor/Microsoft_patents.htm

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

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

Månedens bedste
Årets bedste
Sidste års bedste