Avatar billede googolplex Novice
20. oktober 2004 - 20:15 Der er 41 kommentarer og
2 løsninger

Hjælp til regex

1. Jeg har følgende regex:

/^[1-9][0-9]{0,5}$/

Det skal indeholde et tal mellem 1 - 999999. Men det må også gerne indeholde tallet 0, hvordan gør jeg det ?

Jeg har prøvet med:

/^0|([1-9][0-9]{0,5})$/ - Men det funker ikke :(

2. Jeg skal bruge et regulært udtryk ligesom det første, men i dette tilfælde må det have op til 2 decimaler. Desuden skal 0 | 0,0 | 0,00 godtages, men ellers må det ikke starte med 0 (som i 1).
Avatar billede Slettet bruger
20. oktober 2004 - 23:10 #1
1: Hvad med /^(0|[1-9]\d{0,5})$/

2: Jeg går ud fra, at du udtrykte dig forkert, og f.eks 0,5 er gyldigt.

/^(0|[1-9][0-9]{0,5})(,\d{1,2})?$/
Avatar billede Slettet bruger
20. oktober 2004 - 23:11 #2
Forresten, jeg kan ligesågodt bruge \d et sted mere i nr. 2

/^(0|[1-9]\d{0,5})(,\d{1,2})?$/
Avatar billede roenving Novice
21. oktober 2004 - 00:08 #3
1: /^\d{1,6}$/
Avatar billede Slettet bruger
21. oktober 2004 - 00:15 #4
roenving: Som jeg forstod det er 012345 ikke en gyldig værdi. Enten et rent 0 eller en værdi, der ikke starter med 0.
Avatar billede roenving Novice
21. oktober 2004 - 00:19 #5
Kan være, du har ret, men hvis han skal opsamle værdien, vil det i mange tilfælde være rasende ligegyldigt, så han skulle have den også !-)
Avatar billede googolplex Novice
21. oktober 2004 - 00:20 #6
Jep, præcis sandbox og ja - jeg udtrykte mig forkert :) Smid et svar!
Avatar billede googolplex Novice
21. oktober 2004 - 00:25 #7
Hvad er fordelen ved \d fremfor [0-9] ?
Avatar billede roenving Novice
21. oktober 2004 - 00:27 #8
3 tegn færre !-)
Avatar billede googolplex Novice
21. oktober 2004 - 00:29 #9
Så funker det hele vidst perfekt, tak :)

http://jjr.dk/fooditems.php
Avatar billede googolplex Novice
21. oktober 2004 - 00:30 #10
Ja, men så skal jeg allokere yderligere 3 hjerneceller til at huske hvad \d står for :P
Avatar billede googolplex Novice
21. oktober 2004 - 00:37 #11
Hmm, hvordan forhindre jeg samtidig (2), at tallet ikke kan være større end 100,00 ?
Avatar billede roenving Novice
21. oktober 2004 - 00:38 #12
Sæt du hellere en halv million af til regexps for det er godt nok et hammergodt værktøj !-)

-- og egentlig er der logik i de fleste \x-ting i regexps:

\d = digits, cifre
\w = word-characters, 'ord'-tegn (a-z, 0-9 og _ !-)
\s = (white-)space-characters, altså ikke aftegnede tegn, såsom mellemrum, tabulator, linje- og sideskift
\b = (word-)borders, altså ord-grænse

-- at der så er alle de andre special-tegn at tænke i er så en hel anden sag !o]
Avatar billede roenving Novice
21. oktober 2004 - 00:39 #13
/^(0|100(,00)?|[1-9]\d?(,\d{1,2})?$/
Avatar billede Slettet bruger
21. oktober 2004 - 00:41 #14
Og fordelen ved \d og de andre er, at de kan bruges inde i [] og at de meget let kan "negeres".
Avatar billede googolplex Novice
21. oktober 2004 - 01:10 #15
Den sidste fungerer ikke roenving :(
Avatar billede Slettet bruger
21. oktober 2004 - 01:21 #16
Måske:
/^(0|100(,0{1,2})?|[1-9]\d?(,\d{1,2})?$/
Avatar billede googolplex Novice
21. oktober 2004 - 08:42 #17
Der mangler vidst en ) et sted, den kan jeg heller ikke få til at virke :P
Avatar billede Slettet bruger
21. oktober 2004 - 10:53 #18
Det har du da ret i.

/^(0|100(,0{1,2})?|[1-9]\d?(,\d{1,2})?)$/
Avatar billede googolplex Novice
21. oktober 2004 - 14:51 #19
Den godtager ikke 0,0 eller 0,00 :(
Avatar billede roenving Novice
21. oktober 2004 - 14:57 #20
Måske sådan:

/^(0|100(,0{1,2})?)|[1-9]\d?(,\d{1,2})?$/
Avatar billede googolplex Novice
21. oktober 2004 - 17:29 #21
Nope, fungerer heller ikke, her godtages fx 012 eller 454,15.
Avatar billede roenving Novice
21. oktober 2004 - 17:32 #22
Vi kan da sætte endnu et sæt paranteser på:

/^((0|100(,0{1,2})?)|[1-9]\d?(,\d{1,2}))?$/
Avatar billede googolplex Novice
21. oktober 2004 - 17:53 #23
Nope, heller ikke :(
Avatar billede googolplex Novice
21. oktober 2004 - 17:57 #24
Det er stadig denne der er bedst:

/^(0|[1-9]\d{0,5})(,\d{1,2})?$/

Den godtager desværre værdier over 100, men pyt, det må jeg leve med :P
Avatar billede roenving Novice
21. oktober 2004 - 17:58 #25
Forstår jeg ikke, for den virker f.eks. på denne:

<input id="minInput" name="minInput" type="text" value="Tom" onchange="alert(this.value.match(/^((0|100(,0{1,2})?)|[1-9]\d?(,\d{1,2}))?$/));" size="20">
Avatar billede googolplex Novice
21. oktober 2004 - 18:00 #26
http://googolplex.dk/fooditems.php

Her godtages 0,0 og 0,00 ikke :(
Avatar billede googolplex Novice
21. oktober 2004 - 18:01 #27
I fedt
Avatar billede roenving Novice
21. oktober 2004 - 18:03 #28
onchange="alert(this.value.match(/^(100(,0{1,2})?|(0|[1-9]\d?)(,\d{1,2}))?$/));"
Avatar billede googolplex Novice
21. oktober 2004 - 18:18 #29
Den godtager tal over 100...men der er jo heller ikke nogen der har sagt at en halv million hjerneceller er nook ;)
Avatar billede roenving Novice
21. oktober 2004 - 18:23 #30
Ikke hos mig, der returnerer den konsekvent null, hvis der er tal, som ikke passer ...
Avatar billede googolplex Novice
21. oktober 2004 - 20:18 #31
Har du prøvet at taste 0 ind ? Eller 45 ?
Avatar billede googolplex Novice
21. oktober 2004 - 20:21 #32
Sådan her:

/^((100(,0{1,2})?)|((0|[1-9]\d?)(,\d{1,2})?))$/

Så vidt jeg kan se virker det nu...tjekker lige noget mere...
Avatar billede roenving Novice
21. oktober 2004 - 20:21 #33
0 virker efter hensigten, men der var en parantes, som lige var røget forkert, så:

onchange="alert(this.value.match(/^(100(,0{1,2})?|(0|[1-9]\d?)(,\d{1,2})?)$/));"
Avatar billede googolplex Novice
21. oktober 2004 - 20:25 #34
Jep, den virker vidst!!!

Roenving, du kan også ligge et svar, så kan I dele :)
Avatar billede googolplex Novice
21. oktober 2004 - 20:27 #35
I øvrigt, denne virker perfelt, men kan den forkortes:

/^[-a-zA-ZæøåÆØÅ\d]{1,50}$/

Er der andre tegn end - man bør godkende i navne ?
Avatar billede roenving Novice
21. oktober 2004 - 20:27 #36
Oki '-)
Avatar billede roenving Novice
21. oktober 2004 - 20:31 #37
\w betyder a-z, 0-9 og _, men du vil måske ikke godkende underscore ?-)

-- og så er der jo en stribe almindelige bogstaver på dansk: ü, ö, é osv.

-- og lidt forkortes kan den under alle omstændigheder, for du kan bruge ignoreCase-parameteren:

/^[-a-zæøå\d]{1,50}$/i !-)
Avatar billede googolplex Novice
21. oktober 2004 - 20:34 #38
/i virker ikke på æøå
Avatar billede roenving Novice
21. oktober 2004 - 20:44 #39
Det gør det da i mine browsere ?-)

Hvilke browsere virker det ikke i ?-)
Avatar billede roenving Novice
21. oktober 2004 - 20:51 #40
Måske har det noget med karakter-sættet at gøre, jeg bruger iso-8859-1 ?-)
Avatar billede googolplex Novice
21. oktober 2004 - 21:02 #41
Jeg bruger:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

Det virker ikke.
Avatar billede googolplex Novice
21. oktober 2004 - 21:02 #42
Det endelige resultat:

http://googolplex.dk/fooditems.php
Avatar billede Slettet bruger
21. oktober 2004 - 22:44 #43
Ihvertfald i PHP, så vil \w indeholde flere tegn alt efter sprogindstillinger.

De tegn, det drejer sig om er f.eks æøåÆØÅ og andre accent-bogstaver, som öç og den slags.

Og husk, man kan lave meget fis med omvendte tegngrupper:

/^[^\W_]{1,50}$/i matcher alle bogstaver og tal, men ikke underscore. (og heller ikke minus.)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester