Avatar billede alex_sleiborg Nybegynder
26. oktober 2005 - 14:48 Der er 15 kommentarer og
1 løsning

Tjekke streng igennem uden Regex

Er der en funktion i c#, så man kan tjekke om en streng indeholder tal fra 0-9??

Og så bogstaver fra a-z A-Z

eller skal man bruge regulær ekspression?
Avatar billede nielle Nybegynder
26. oktober 2005 - 14:51 #1
"Indeholder" eller "kun indeholder"? I det første tilfælde må strengen godt indeholde andet.
Avatar billede arne_v Ekspert
26. oktober 2005 - 14:51 #2
du kan jo altid bruge en for løkke

men formentlig vil regex give dig den pæneste kode som er nemmest at ændre
Avatar billede nielle Nybegynder
26. oktober 2005 - 14:56 #3
string Tekst = "Er der en funktion i c#, så man kan tjekke om en streng indeholder tal fra 0-9??";

bool IndeholderTegn = false;
for (char Tegn='0'; Tegn<='9'; Tegn++)
{
    if (Tekst.IndexOf(Tegn) >= 0)
    {
        IndeholderTegn = true;
        break;
    }
}

if (IndeholderTegn)
    Console.WriteLine("Indeholder et af tal-tegnene.");
else
    Console.WriteLine("Indeholder ikke et af tal-tegnene.");
Avatar billede alex_sleiborg Nybegynder
26. oktober 2005 - 15:05 #4
Det jeg gerne vil undgå er at, man kan skrive Al6x...
Avatar billede nielle Nybegynder
26. oktober 2005 - 15:07 #5
Er det 6-taller som er ulovligt? Eller de tre punktummer eller hvad?
Avatar billede alex_sleiborg Nybegynder
26. oktober 2005 - 15:09 #6
Der hvor man skal skrive sit navn, må man ikke skrive andet end bogstaver. Ingen symboler eller tal
Avatar billede nielle Nybegynder
26. oktober 2005 - 15:19 #7
Så er det nu nemmest med en RegEx - er der nogen speciel grund til at du ikke ønsker at bruge sådan en?
Avatar billede alex_sleiborg Nybegynder
26. oktober 2005 - 16:49 #8
Næ det er der nu ikke. Det kunne bare godt være, at det kunne lade sig gøre uden
Avatar billede nielle Nybegynder
26. oktober 2005 - 18:09 #9
Det kan det da sagtens, men koden bliver bare mere omfattende. Du kan jo selv dømme:

using System;
using System.Text.RegularExpressions;

namespace e659313
{
    class Class1
    {
        [STAThread]
        static void Main(string[] args)
        {
            string Tekst = "Er der en funktion i c#, så man kan tjekke om en streng indeholder tal fra 0-9??";

            MedRegex(Tekst);
            UdenRegex(Tekst);
        }

        static void MedRegex(string Tekst)
        {
            Regex RE = new Regex("^[a-zæøå]+$", RegexOptions.IgnoreCase);
            if (RE.Match(Tekst).Success)
                Console.WriteLine("Lovlig");
            else
                Console.WriteLine("Ikke lovlig");
        }

        static void UdenRegex(string Tekst)
        {
            bool Lovlig = true;
            for (int index=0; index<Tekst.Length; index++)
            {
                char Tegn = Tekst[index];
                if (('a' <= Tegn && Tegn <= 'z') ||
                    (Tegn == 'æ') || (Tegn == 'ø') || (Tegn == 'å') ||
                    ('A' <= Tegn && Tegn <= 'Z') ||
                    (Tegn == 'Æ') || (Tegn == 'Ø') || (Tegn == 'Å'))
                {
                    // Et lovligt tegn.
                }
                else
                {
                    Lovlig = false;
                    break;
                }
            }

            if (Lovlig && (Tekst != ""))
                Console.WriteLine("Lovlig");
            else
                Console.WriteLine("Ikke lovlig");
        }
    }
}
Avatar billede alex_sleiborg Nybegynder
26. oktober 2005 - 19:38 #10
Smid et svar nielle:) Havde godt nok tænkt på den sidste metode uden regex, men synes ikke det er så pænt. Så det bliver med regex. Og tak
Avatar billede nielle Nybegynder
26. oktober 2005 - 20:52 #11
Svar :^)
Avatar billede arne_v Ekspert
26. oktober 2005 - 21:00 #12
nielle>

Jeg synes ikke at din uden regex kode er pænest muligt.

using System;
using System.Text.RegularExpressions;

namespace E
{
    class MainClass
    {
        private static Regex re = new Regex("^[A-Za-zÆØÅæøå]*$");
        public static bool AllText1(string s)
        {
            return re.Match(s).Success;
        }
        private static string valid = "ABCDEFGHIHKLMNOPQRSTUVWXYZÆØÅ" +
                                      "abcdefghijklmnopqrstuvwxyzæøå";
        public static bool AllText2(string s)
        {
            for(int i = 0; i < s.Length; i++)
            {
                if(valid.IndexOf(s[i]) < 0)
                {
                    return false;
                }
            }
            return true;
        }
        public static void Test(string s)
        {
            Console.WriteLine(AllText1(s));
            Console.WriteLine(AllText2(s));
        }
        public static void Main(string[] args)
        {
            Test("ABC");
            Test("123");
            Test("A1");
        }
    }
}
Avatar billede nielle Nybegynder
26. oktober 2005 - 21:11 #13
"Pænest muligt" er jo sådan set et subjektivt begreb - personligt er jeg nu godt tilfreds.

Du laver dine funktioner sådan at de returnere bool'ske værdier og det spare selvføgeligt på linjerne - og selv om dette jo sådan set ikke noget at gøre med selve algoritmen - så får I den alligevel i "samme" udgave:

static bool UdenRegex(string Tekst)
{
    for (int index=0; index<Tekst.Length; index++)
    {
        char Tegn = Tekst[index];
        if (!(('a' <= Tegn && Tegn <= 'z') || (Tegn == 'æ') || (Tegn == 'ø') || (Tegn == 'å') ||
              ('A' <= Tegn && Tegn <= 'Z') || (Tegn == 'Æ') || (Tegn == 'Ø') || (Tegn == 'Å')))
            return false;

        return true;
    }
}
Avatar billede arne_v Ekspert
26. oktober 2005 - 21:18 #14
pointen er ikke så meget bool versus Console.WriteLine (eller for den sags skyld
{} versus ikke {})

pointen var at hive de valide tegn ud i en liste
Avatar billede nielle Nybegynder
26. oktober 2005 - 21:23 #15
Jeg er godt klar over hvad du mener - det var det jeg skrev ang. algoritmen. Det kan bare være svært for det utrænede øje at abstrahere fra den slags ting; Derfor min alternative kode som lå tættere op af din form. :^)

Vi har bare valgt at angibe problemet fra hver sin ende - og jeg synes stadig godt at jeg kan være mit forslag bekendt.
Avatar billede arne_v Ekspert
26. oktober 2005 - 21:25 #16
sagtens

jeg ville bare lige nævne at jeg synes at IndexOf giver lidt pænere kode
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

IT-JOB

Ringkjøbing Landbobank – Nordjyske Bank

Forretningsudvikler til procesoptimering

Netcompany A/S

IT Consultant

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Netværksteknikere til design, drift og vedligehold ved Cyberdivisionen