Avatar billede dl Nybegynder
10. april 2008 - 12:25 Der er 14 kommentarer og
1 løsning

Regulere udtryk

Jeg har desvære ikke få købt en bog, da det først var igår at de gik op for mig, hvor FEDT dette er.

Men jeg skal lige bruge en hånd til at komme igen.

jeg har:

                Regex strValid = new Regex("[0-9a-zA-Z + æøåÆØÅ]");
                if (strValid.Match(value).Success)

Jeg vil have en tekst som er valid kun hvis den indenholder:

((a-z)  (A-Z)  (0-9) -  ) og alt dette må kun være 0 til 20 char langt.

hvordan gør jeg det. Og lidt forklaring er også meget velkommen.

Tænkte på at købe denne bog: http://www.polyteknisk.dk/home/Detaljer/9780596528126

ISBN-10: 0596528124
ISBN-13: 9780596528126
Avatar billede nielle Nybegynder
10. april 2008 - 13:36 #1
Regex strValid = new Regex("^[0-9a-zæøå-]{0,20}$", RegexOptions.IgnoreCase);

For en forklaring: Du kan jo f.eks. læse min artikel om om regulære udtryk her:

http://www.eksperten.dk/artikler/1156


Det er en udemærket bog, den der, men den giver nok mere udbytte hvis man allerede er trænet i egexp på fprhånd.
Avatar billede nielle Nybegynder
10. april 2008 - 13:39 #2
Men ellers vil jeg da personligt anbefale:

Regular Expresions, The Complete Tutorial
2006
Jan Goyvaerts
ISBN: 1-4116-7760-9

Bogen er groft sagt en bogversion af hans site:

http://www.regular-expressions.info/
Avatar billede dl Nybegynder
10. april 2008 - 16:12 #3
uhh  tak for det  :)  hvordan får jeg ind, at man godt må have et mellemrum :)

nielle, kommer du med et svar.
Avatar billede nielle Nybegynder
10. april 2008 - 18:19 #4
Mellemrum:

Regex strValid = new Regex("^[0-9a-zæøå -]{0,20}$", RegexOptions.IgnoreCase);

- og et svar :^)
Avatar billede dl Nybegynder
10. april 2008 - 19:09 #5
fand ud af , at man også kan gøre det med \s  er det ikke rigtig.

Hvordan kan man eventuelt test om den fande det den skal og kun det som den skal.

en test på, om jeg har laves det rigtig.
Avatar billede Syska Mester
10. april 2008 - 20:30 #6
strVailid.IsMatch("string");

Mener jeg returnere true hvis der er match ... dog ikke helt sikker ...
Avatar billede dl Nybegynder
10. april 2008 - 20:36 #7
ja, det gørden buzzz... men var ikke lige det jeg mente  :)

Hvordan kan jeg lave en test på mit udtryk, så jeg kan se at det virker 100% som det skal.  Det skal jo være drift sikkert.
Avatar billede nielle Nybegynder
10. april 2008 - 21:31 #8
\s matche ganske rigtigt et mellemrum, men det matcher også tabulator tegn og linjeskift.
Avatar billede nielle Nybegynder
10. april 2008 - 21:35 #9
Det er nok umuligt at finde en 100% skudsikker måde at teste din regexp på ... mit råd er at holde den så simpel som muligt, og at lade være med at forsøge at få den til at løse en hel masse problemer i eet hug. Ellers kan du ikke overskue hvad den egentlig gør.
Avatar billede dl Nybegynder
10. april 2008 - 21:35 #10
hmm.. hvor læser du dette ?
Avatar billede Syska Mester
10. april 2008 - 22:14 #11
http://regexlib.com/Resources.aspx
Der er sikkert en del der kan forklare den ....

Den eneste måde du kan teste på om det virker 100% er at prøve at skrive alt ind som er muligt som se om du får et Match ... :-)

Alt som er human made, kan der være fejl i ... og samme med din regex :-) ingen nem måde udenom ... men keep it simple ... det er altid en god ting
Avatar billede nielle Nybegynder
10. april 2008 - 22:31 #12
> hmm.. hvor læser du dette ?

Hvor læser hvem hvad?
Avatar billede Syska Mester
11. april 2008 - 15:37 #13
Tror han mener at "\s" tager alt det med du skrev ...
Avatar billede nielle Nybegynder
12. april 2008 - 07:44 #14
> Tror han mener at "\s" tager alt det med du skrev ...

Det læser man i enhver fornuftig regexp guide/tutorial/bog. Det ville nu også være en smule overkill at indføre ’\s’ når man allerede kan matche et mellemrum ved at skrive et, ja, mellemrum – altså hvis ’\s’ ikke også matcher noget mere end kun mellemrum.

’\s’ matcher helt generelt whitespace tegn, altså tegnene: ’ ’, ’\t’ (tabulator), ‘\r’ (carriage return) og ‘\n’ (newline).

Du behøver i øvrigt skam ikke at tage mit ord for det – det kan nemt afprøves direkte:

            string pattern = @"\s";

            if (Regex.IsMatch(" ", pattern))
                Console.WriteLine("Matcher mellemrum.");

            if (Regex.IsMatch("\t", pattern))
                Console.WriteLine("Matcher tabulator.");

            if (Regex.IsMatch("\r", pattern))
                Console.WriteLine("Matcher carriage return.");

            if (Regex.IsMatch("\n", pattern))
                Console.WriteLine("Matcher newline.");

            if (Regex.IsMatch("a", pattern))
                Console.WriteLine("Matcher a.");
            else
                Console.WriteLine("Matcher ikke a.");

Problemet med at teste regulære udtryk er som regel at man ofte skal være rigtig snedig for lige at finde de tilfælde hvor filmen knækker. Det er nemt nok at teste at en given regexp matcher det man ønsker sig, men det kan være hulens svært at teste at den ikke matcher mere end det.
Avatar billede dl Nybegynder
13. april 2008 - 22:11 #15
Tak´ker for de fine ord. undskylder at jeg ikke lige har været til stede herinde.
Jeg tror jeg køber den bog jeg snakker om  :)

//dl

Det er klart sådan man skal gøre det, så det skal jeg lige lære og blive mester i det  :)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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