Avatar billede fabeldyr Nybegynder
24. september 2001 - 20:25 Der er 21 kommentarer og
1 løsning

test email

Jeg har lavet denne reg-expr til at validere email-adresser:

^[\\w\\.]+@[\\w]+\\.[\\w\\.]{2,}

Det er vigtigt at den virker.
Find en fejl, og du får pointene.
Hvis du har nogle gode ændringsforslag kan du også få lidt...

Avatar billede erikjacobsen Ekspert
24. september 2001 - 22:36 #1
Du tillader ikke en lovlig adresse som mail@a-b-c-d.com
Og du tillader en ulovlig som mail@abcd.d
Avatar billede fabeldyr Nybegynder
25. september 2001 - 00:03 #2
Super!
Den med bindestregen var ret fatal!
Jeg skifter til denne:

^[\\w\\.-]+@[\\w\\.-]+\\.[a-zA-Z]{2,}$

ps. jeg kan ikke lige finde ud af hvordan man giver point... Men du skal nok få dem!

..Er det mon fordi du har svaret med en kommentar?
Avatar billede erikjacobsen Ekspert
25. september 2001 - 07:09 #3
Skidt med point - jeg har jo ikke lavet noget særligt :)

Det der vistnok mangler er så de \"sjove\" tegn,
såsom æøåäü... osv, der vel er eller bliver tilladt.
Avatar billede erikjacobsen Ekspert
25. september 2001 - 07:21 #4
Nå ja, og underscore _ er vist også
tilladt før @
Avatar billede fabeldyr Nybegynder
25. september 2001 - 07:59 #5
underscore er automatisk med i \\w
De \"sjove\" tegn... Er de kommet?
Men du har ret.
Jeg bør nok hellere acceptere dem.
Avatar billede erikjacobsen Ekspert
25. september 2001 - 09:24 #6
Åh, ja, de er med i \\w, men de er
ikke tilladt i domænenavne - jeg ved
ikke lige om de er i subdomænenavne
Avatar billede erikjacobsen Ekspert
25. september 2001 - 09:28 #7
Jo, det ser ud til at
  mail@under_score.whatever.com
er lovligt, mens
  mail@whatever.under_score.com
ikke er
Avatar billede sune_posselt Nybegynder
25. september 2001 - 21:53 #8
Ovenstående funktion vil udelukke mange tilladte adresser. Den lokale del af e-mail adressen (den før @) må, teoretisk set, indeholde praktisk talt alt, hvis det vel at mærke er quotet korrekt ud. Det kan ikke anbefales at lave den slags kryptiske e-mailadresser, men det er heller ikke forbudt.
Der er endda en masse tegn, som er tilladte uden at quotes ud, som ovenstående udelukker. Umiddelbart kan jeg kun lige finde på +, men hvis man kigger sig lidt omkring, og eventuelt læser RFC\'en, er jeg sikker på at man kan finde utrolig mange.
Derfor synes jeg personligt ikke at det giver mening at validere den lokale del, ud over at den skal indeholde mindst et tegn.

Angående domænedelen (den efter @) KAN man så vidt jeg husker skrive den som [192.168.10.42] (domænets IP.adresse). Igen kan det ikke anbefales, men hvis det er lovligt bør man vel ikke lave en funktion som udelukker det. Dette burde dog ikke være specielt svært at kompensere for, ved at tjekke at den enten har syntaksen ´(sub.)domain.suffix eller [x.x.x.x].

Mvh. Sune
Avatar billede fabeldyr Nybegynder
26. september 2001 - 02:39 #9
Jeg har browset lidt rundt for at finde nogle regler.
Det nærmeste jeg er kommet er syntaksregler for urn´er :

http://www.ietf.org/rfc/rfc2141.txt

Jeg stødte på et perlscript her:
http://www.cgiscript.net/cgi-script/csNews/csNews.cgi?database=perl%2edb&command=viewone&id=4&op=t


sub check_email {
    # Initialize local email variable with input to subroutine.              #
    $email = $_[0];

    # If the e-mail address contains:                                        #
    if ($email =~ /(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)/ ||

        # the e-mail address contains an invalid syntax.  Or, if the        #
        # syntax does not match the following regular expression pattern    #
        # it fails basic syntax verification.                                #

        $email !~ /^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$/) {

        # Basic syntax requires:  one or more characters before the @ sign,  #
        # followed by an optional \'[\', then any number of letters, numbers,  #
        # dashes or periods (valid domain/IP characters) ending in a period  #
        # and then 2 or 3 letters (for domain suffixes) or 1 to 3 numbers    #
        # (for IP addresses).  An ending bracket is also allowed as it is    #
        # valid syntax to have an email address like: user@[255.255.255.0]  #

        # Return a false value, since the e-mail address did not pass valid  #
        # syntax.                                                            #
        return 0;
    }

    else {

        # Return a true value, e-mail verification passed.                  #
        return 1;
    }
}

Avatar billede fabeldyr Nybegynder
26. september 2001 - 03:01 #10
Jeg kan godt lide den første:
/(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)/

Simpel og ligetil.
Den kan vi vel godt blive enige om er korrekt?

Den anden halvdel ser lidt mere suspekt ud...
Den godtager ikke \"+\"
Rune: Er du sikker på plusset?

Følgene er klippet ud af rfc2141:

  <NSS>        ::= 1*<URN chars>

  <URN chars>  ::= <trans> | \"%\" <hex> <hex>

  <trans>      ::= <upper> | <lower> | <number> | <other> | <reserved>

  <hex>        ::= <number> | \"A\" | \"B\" | \"C\" | \"D\" | \"E\" | \"F\" |
                    \"a\" | \"b\" | \"c\" | \"d\" | \"e\" | \"f\"

  <other>      ::= \"(\" | \")\" | \"+\" | \",\" | \"-\" | \".\" |
                    \":\" | \"=\" | \"@\" | \";\" | \"$\" |
                    \"_\" | \"!\" | \"*\" | \"\'\"

<reserved>    ::= \'%\" | \"/\" | \"?\" | \"#\"

pluser, parenteser og udråbstegn!
tilladt i en URN...
Men hvad er en URN i det hele taget?

Måske skulle jeg bare bygge min test udfra:

<excluded> ::= octets 1-32 (1-20 hex) | \"\\\" | \"\"\" | \"&\" | \"<\"
                  | \">\" | \"[\" | \"]\" | \"^\" | \"`\" | \"{\" | \"|\" | \"}\" | \"~\"
                  | octets 127-255 (7F-FF hex)


- Bortset fra at man jo godt må have [] i domænenavnet...

Så meget for en ****ing linie!
Avatar billede fabeldyr Nybegynder
26. september 2001 - 10:04 #11
Ny version:

Først check for <excluded> efter @:
/(@.*[\\x00-\\x20\\\\\"&<>^`{|}~\\x7f-\\xff])/

Så den simple:
/(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)/

Så en redesignet af den *suspekte*
/^.+\\@(.*\\.\\w{2,3}$)|(\\[\\d{1,3}.\\d{1,3}.\\d{1,3}\\]$)/

-------------

Jeg har klasket det sammen i et HTML-dokument.
Kan testes på \"http://edit.comalab.net/test5.htm\"

Bjørn
Avatar billede sune_posselt Nybegynder
26. september 2001 - 13:48 #12
Ja, jeg er helt sikker på plusset - i den lokale del vel at mærke.
Jeg er til gengæld ikke på stående fod sikker på hvad en URN er, så hvorvidt reglerne for en URN også gælder for en e-mailadresse kan jeg ikke rigtig sige :-)
Så vidt jeg lige kan se er den RFC du mangler 2822: http://www.ietf.org/rfc/rfc2822.txt?number=2822, men jeg er ikke sikker.
Tjeck eventuelt http://www.utoronto.ca/webdocs/Official/email.html, for RFC\'er omhandlende e-mail. Vær dog opmærksom på at disse kan være forældede (for eksempel henviser den til 822 og ikke 2822, som har erstattet den).

Mvh. Sune
Avatar billede sune_posselt Nybegynder
26. september 2001 - 15:01 #13
Ok, efter at have læst lidt nærmere på det, ser det ud til at alle ascii tegn fra nummer 33 til nummer 126 er tilladte unquotede i den lokale del, dog undtaget \" @ < > [ ] ( ) \\ . , : ;
Punktumet er dog ikke forbudt, men har den begrænsning at det ikke må optræde to gange i træk og ikke må optræde som det første eller det sidste tegn i den lokale del.
Du kan se en liste med ovenstående ascii tegn her: http://www.telacommunications.com/nutshell/ascii.htm


En quotet lokal del er sjælden, og i mine øjne frarådelig, men ikke forbudt. En sådan SKAL starte og slutte med en qoute (\"). Quotes den lokale del er stort set alle tegn tilladt, inklusiv dem beskrevet som forbudte i det ovenstående. Dog SKAL nogle tegn \"escapes\" med et foranstående backslash, nemlig (\") og (\\). Andre tegn KAN escapes med et backslash.
Mvh. Sune

Ps. Selvom jeg ikke decideret har svaret på dit spørgsmål, synes jeg efter al den læsning på emnet at jeg har fortjent lidt point, så jeg smider lige et svar
Avatar billede fabeldyr Nybegynder
26. september 2001 - 17:14 #14
Hvordan giver man færre point end de afsatte?

Efter hvad du siger er følgende email korrekt: kurt\"@\"salat@k.dk

Der bliver min rutine snydt...
Både 1´eren, 2´eren og 3´eren melder fejlagtigt fejl...

Jeg tror ikke jeg gider mere.
Det er bare synd for kurt@salat...

Avatar billede fabeldyr Nybegynder
26. september 2001 - 17:18 #15
he he..
Læg lige mærke til at Eksperten i ovenstående kommentar går galt i byen mht. kurt.
Han er blevet reduceret til salat...
Avatar billede fabeldyr Nybegynder
26. september 2001 - 17:22 #16
På Speednames tillader de ikke quotede navne...
Men de tillader heller ikke æøå.
Avatar billede sune_posselt Nybegynder
26. september 2001 - 17:25 #17
Tjah, der er faktisk meget diskussion om hvorvidt kurt\"@\"salat@k.dk er tilladt, eller om det skal skrives \"kurt@salat\"@k.dk.

Anyway var min konklusion at så kunne det sgu også bare være lige meget, jeg har dog bare gjort det modsatte af dig, og tilladt stort set alt, hvad der har syntaksten noget@nogetandet.nogetandetpåmindsttobogstaver. Jeg kender nemlig en der hedder Kurt, og han er flink, så ham vil jeg ikke udelukke :-)

Mvh. Sune

Ps. Vidste du at K-salat engang stod for København salat, men så flyttede de (vidst nok til Havnstrup eller sådan noget) så nu står det bare for kvalitet?
Avatar billede fabeldyr Nybegynder
26. september 2001 - 18:53 #18
Jeg troede K´et stod for Kurt.

Det overasker mig at dette er ulovligt:
flinke.kurt@k.dk

Er du sikker?
Avatar billede fabeldyr Nybegynder
26. september 2001 - 19:41 #19
Det er mig der ikke læser ordentligt...
flinke.kurt@k.dk er fin nok

Hvis ikke tegn 127-255 er tilladt, så er æøå også bandlyst...

Kan det nu passe?
Avatar billede fabeldyr Nybegynder
26. september 2001 - 20:00 #20
Jeg kunne ikke lade det ligge...
Scriptet på http://edit.comalab.net/test5.htm er opdateret:

function checkEmail(s) {
    var re = /(.*)@(.*)/
    var a = re.exec(s)
    if (!a) throw new Error(\'Syntax error in email address\')
    var sName = a[1]
    var sDomain = a[2]

//    alert(\'Name: \'+sName+\'\\n\'+\'Domain:\'+sDomain)

//    First check name
    if (sName==\'\') throw new Error(\'Syntax error in email address:\\nNo name\')
    s = sName
    if (/\"/.test(s)) {
        if (/(^\\.)|(\\.$)/.test(s)) throw new Error(\'Syntax error in email address:\\nName contains malplaced dot!\')
        s = s.replace(/\\\\./g,\'\')        // Backslashed chars are legal... remove´em
        s = s.replace(/\"[^\"]*\"/g,\'\')        // Quoted stuff is legal too... trash´em
    }
    else {
        if (/(^\\.)|(\\.\\.)|(\\.$)/.test(s)) throw new Error(\'Syntax error in email address:\\nName contains malplaced dot!\')
    }
    if (/[\\x00-\\x20\\x7f-\\xff@<>\\[\\](),:;]/.test(s)) throw new Error(\'Syntax error in email address:\\nName contains invalid characters\')

//    Then check domain
    if (/[\\x00-\\x20\\\\\"&<>^`{|}~@\\x7f-\\xff]/.test(sDomain)) throw new Error(\'Syntax error in email address:\\nDomain contains invalid characters\')
    if (/(^\\.)|(\\.\\.)|(\\.$)/.test(sDomain)) throw new Error(\'Syntax error in email address:\\nDomain contains malplaced dot!\')
    if (!/(.*\\.\\w{2,3}$)|(\\[\\d{1,3}.\\d{1,3}.\\d{1,3}\\]$)/.test(sDomain)) throw new Error(\'Syntax error in email address:\\nDomain is invalid\')
}

Nu skal man vist være meget snedig hvis man kan finde en lovlig email-adresse der bliver forkastet.


Avatar billede fabeldyr Nybegynder
26. september 2001 - 20:04 #21
Elegant, ikke sandt?
Avatar billede sune_posselt Nybegynder
26. september 2001 - 20:07 #22
Man kan da i hvert fald ikke beskylde dig for at give let op.

Nu bliver jeg jo nødt til at bruge hele natten på at finde en lovlig adresse som bliver forkastet ;-)
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