Avatar billede alex_sleiborg Nybegynder
25. januar 2007 - 11:17 Der er 11 kommentarer og
1 løsning

reg ex navn validering

Jeg skal have valideret et navn med reg ex. Jeg har dette her indtil videre, men det tillader ikke mellemrum mellem fornavn og efternavn. Og det er jo ikke helt hensigtsmæssigt, nogen der lige hurtigt kan komme med en rettelse til det

            Regex RE_STRING = new Regex("[^a-zA-ZÆØÅæøå]", RegexOptions.IgnoreCase);// Text
Avatar billede jokkejensen Novice
25. januar 2007 - 13:20 #1
[^\t\n\r]{0,255}

/JJ
Avatar billede md_craig Nybegynder
26. januar 2007 - 14:06 #2
Det kommer jo an på hvor strict du vil være...

"p t l" er navn?... det vil det jo fx være med [^\t\n\r]{0,255}

du må få sat lidt kreterier op for hvornår du acceptere ting som navne og hvornår ikke...

tag navnet: Peter Ølgod Hansen (Bare tænkt)

Hvor mange af disse er ok:

Peter Ølgod Hansen
Peter Ø. Hansen
Peter Ø Hansen
Peter Ø. H.
Peter Ø H
Peter Ø. H
Peter Ø H.
P Ø H
P. Ø. H.
PØH

Og sådan kan man jo fortsætte...
Men jeg kunne jo godt forestille mig at nogle af overstående ikke er så skide smart
Avatar billede alex_sleiborg Nybegynder
30. januar 2007 - 15:54 #3
Den virker ikke rigtig den her...

Den melder mener ikke der er noget der er korrekt navn

            Regex RE_NAME = new Regex("[^\t\n\r]{0,255}",regexOptions.IgnoreCase);// Numbers
Avatar billede alex_sleiborg Nybegynder
02. februar 2007 - 11:39 #4
Jeg synes et gyldigt navn skulle være feks.
Peter Hansen
Skal man have mellem navn med, skal man ikke bruge .
Peter Ølgod Hansen
Altså alle tal og tegn er ikke gyldige..
Hvordan får jeg lavet sådan en reg ex
Avatar billede md_craig Nybegynder
02. februar 2007 - 15:17 #5
((\w{2,})(\s\w+)+)

måske... kommer igen an på hvor dan og hvorledes...

Den iverstående acceptere Et fornavn der er mere end 2 tegn langt, efterfulgt af en eller flere blokke bestående af et mellemrum efterfulgt af et alfabetisk tegn...

Peter Ølgod Hansen vil således bliver godgkendt som:

(Peter)( Ølgod)( Hansen)

Paranteserne ilusterer hvor blokene er...
Avatar billede alex_sleiborg Nybegynder
05. februar 2007 - 22:28 #6
md craig. Den virker ikke den du har skrevet... Den lader ikke Peter Ølgod Hansen igennem. Kun feks. Peter

Her er lidt kode

            Regex RE_NAME = new Regex(@"((\w{2,})(\s\w+)+)", RegexOptions.IgnoreCase);// Name

            else if (RE_NAME.Match(this.txtFullName.Text).Success)
            {
                errorProvider.SetError(txtFullName, "Dette er ikke et gyldigt navn");
                return false;
            }
Avatar billede md_craig Nybegynder
06. februar 2007 - 16:51 #7
prøv med RE_NAME.IsMatch(...)
Avatar billede md_craig Nybegynder
06. februar 2007 - 16:56 #8
Eller... det er nok ikke lige det... doh... er bare lige fordi jeg ikke så du kaldte Success...

Kan måske hænge sammen med noget Culture haløj, ved ikke helt, hvad giver:

Console.WriteLine( CultureInfo.CurrentCulture.EnglishName );

Dig? (Alts hvad står der i: CultureInfo.CurrentCulture.EnglishName)
Avatar billede md_craig Nybegynder
06. februar 2007 - 17:03 #9
En anden ting, hvis den er et match er den vel et gyldigt navn? o.O...
Her giver følgende kode dette resultat:

    class Program
    {
        static void Main( string[] args )
        {
            Regex ex = new Regex(@"((\w{2,})(\s\w+)+)",RegexOptions.IgnoreCase);
       
            List<string> names = new List<string>();
            names.Add( "Peter Ølgod Hansen" );
            names.Add( "Peter Ø Hansen" );
            names.Add( "Peter Ø H" );
            names.Add( "Peter Ø. H." );
            names.Add( "Peter Hansen" );
            names.Add( "Peter H" );
            names.Add( "P Ø H" );
            names.Add( "PØH" );
            names.Add( "Peter H." );

            foreach( string str in names )
            {
                Console.WriteLine( "{0} is a match? {1}", str, ex.IsMatch( str ) );
            }
        }
    }


Peter Ølgod Hansen is a match? True
Peter Ø Hansen is a match? True
Peter Ø H is a match? True
Peter Ø. H. is a match? True
Peter Hansen is a match? True
Peter H is a match? True
P Ø H is a match? False
PØH is a match? False
Peter H. is a match? True

hvor \w åbenbart også gælder for .'er... såd er skal du nok udskifte \w med din egen [a-zA-ZÆØÅæøå].
Avatar billede md_craig Nybegynder
06. februar 2007 - 17:07 #10
nej... retter lige mig selv igen... hehe... der kan man se hvordan det går med ikke lige at gennemtænkte ting og afprøve dem ordenligt...

Der skal lige nogle Line start og Line end ind. ellers vil stadig matche bare en portion af din string matcher... derfor:

Regex ex = new Regex(@"^((\w{2,})(\s\w+)+)$",RegexOptions.IgnoreCase);

læg mærke til ^ og $...

Og så skal du vende den her om, overstående udtryk validere nemlig at det ER et navn vi har fat i, og ikke dem omvendte vej som er den aproach du tager...
Avatar billede alex_sleiborg Nybegynder
28. februar 2007 - 12:29 #11
Sorry er jeg ikke har svaret før. Men smid et svar md craig, det virker det du har lavet. Mange tak:)
Avatar billede md_craig Nybegynder
28. februar 2007 - 13:18 #12
svar...
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