I et inbound callcenter, hvor identiteten på den, der ringer ind, skal bekræftes, kan kontrollen nu foregå i telefonkøen. Det understøtter fem centrale KPI'er for callcentre.
(Udtrykket må KUN indeholde tal og punktummer - men punktum er optionalt. Kunne dog være smart hvis udtrykket ikke blev sandt hvis der kun var et punktum - dog ikke et krav)
Synes godt om
Slettet bruger
28. november 2005 - 19:01#2
Først den nemme:
/^[0-9.]*$/
Så den smarte (Skal indeholde cifre og må godt have et punktum, men ikke mere end et)
Derimod virker følgende ganske udemærket - til blot at tjekke om det er et tal:
Regex(@"\d");
Synes godt om
Slettet bruger
28. november 2005 - 21:06#5
Nu har jeg ikke lige benyttet regex fra C# - det har været noget af det næste jeg ville se på, lige siden jeg begyndte i skolen, hvor vi netop bliver undervist i at programmere C#.
En ting dog: Du mangler ^-tegnet i begyndelsen
Og jeg manglede et ?-tegn i slutningen.
Regex regex = new Regex(@"/^([0-9]+\.[0-9]+|\.[0-9]+|[0-9]+\.?)$/");
Synes godt om
Slettet bruger
28. november 2005 - 21:10#6
Men den kan jo kortes lidt ned så. Jeg var ikke klar over hvilke "genveje" der var understøttet i C#, for alle forkortelserne er nemlig ikke med i alle regexp-versioner.
Regex regex = new Regex(@"/^(\d+\.\d+|\.\d+|\d+\.?)$/");
Synes godt om
Slettet bruger
28. november 2005 - 21:13#7
Og den kan jo gøres kortere:
Regex regex = new Regex(@"/^(\d+\.?\d*|\.\d+)$/");
OK, jeg har fundet fejlen. I C# må der ikke være // som start og slut på en regex, og det skal der være i andre udgaver. Hvis de bliver fjernet, virker det.
Super! Tusind tak! Rart at man kan få hjælp til det. Jeg har ikke haft overskud til at sætte mig ordentlig ind i RegEx - det er eksamenstid for mit vedkommende :)
Synes godt om
Slettet bruger
28. november 2005 - 22:11#13
Tjah, og nu fik jeg jo en undskyldning for endelig at sætte mig ind i hvordan de virker i C#, for der er altid små forskelle fra sprog til sprog:
I Perl er det ekstremt let at bruge en regex: if ( "1234" =~ /^\d*$/ ) echo "Det var kun tal";
I PHP er det lidt mere bøvlet: if ( preg_match("/^\d*$/", "1234" ) echo "Det var kun tal";
I C# er der en masse objekt-hurlumhej udenom.
NB Husk ^ og $ tegnet, for ellers ville du ikke fange sådan noget som a123, som også ville være blevet godkendt af den, du skrev 21:01:02. ^ betyder begyndelsen af en streng og $ betyder slutningen.
"\d" vil godkende enhver streng der bare indeholder mindst et ciffer. "^\d$" vil godkende enhver streng, der indeholder netop et ciffer og intet andet. "^\d+$" vil godkende en streng, der indeholder et eller flere cifre og intet andet.
Og det kan tit være en fordel at tænke bagvendt (i [] betyder en ^ som første tegn, at den matcher på alle andre tegn, end de nævnte):
"[^0-9]" vil godkende enhver streng, der indeholder et tegn, der ikke er et ciffer. "[^0-9.]" vil godkende enhver streng, der indeholder andre tegn end cifre og punktum.
Den sidste vil dermed fejle dine gyldige strenge, og så kan man finde dem på den måde. Nu komplicerede jeg så opgaven lidt, for selv om du ikke havde sagt, at der kun måtte være et punktum, gik jeg ud fra det, og så dur den omvendte tankegang ikke mere.
Den kan let udvides til at godtage den første ved bare at ændre det andet + til en *, men hvis den skal godkende begge (og samtidig ikke godkende en streng med kun et punktum og ingen tal) er man nødt til at bruge (|)
Det er selvfølgelig muligt, at de to heller ikke skal godkendes, men det fremgik ikke af opgavebeskrivelsen - og folk har vel nærmest vænnet sig til at kommatal mellem 0 og 1 kan skrives uden det foranstillede nul.
Tjah, hvis det skal være tilladt med et decimal-tal uden noget foran kan man bare ændre det første + til * !-)
Synes godt om
Slettet bruger
29. november 2005 - 15:26#18
Nej, for så vil den også godtage en tom streng. (Det ville mit første nemme forslag forresten også.)
Synes godt om
Ny brugerNybegynder
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.