Avatar billede living8671 Nybegynder
10. juli 2007 - 14:21 Der er 13 kommentarer og
1 løsning

Problemer med validering af mails med tal (PHP formmail)

Hej Eksperter,

Har lånt Morten Barklunds udemærkede PHP formmail script til min kontaktformular på mit site - men den tillader ikke e-mails med tal foran @ !! Eks. 123@hotmail.com osv.
Er der nogen der ud fra scriptet nedenfor kan se hvad der skal ændres?

Scriptet ser således ud:

// checker om e-mail formatet er korrekt
// credit: Morten Barklund

function checkEmail(e) {
        var legalChars = "abcdefghijklmnopqrstuvwxyzæøå";
        var afterChars = legalChars+"0123456789-_";
        var beforeChars = afterChars+"%#";
        var pos = 0;
        var count;
        var start;
        e = e.toLowerCase();
        var lastDot = e.lastIndexOf(".");
        lastDot = lastDot == -1 ? e.length-1 : lastDot;
        while (pos<lastDot && e.charAt(pos) != "@") {
                if (pos != 0 && e.charAt(pos++) != ".") {
                        return false;
                }
                if (legalChars.indexOf(e.charAt(pos++)) == -1) {
                        return false;
                }
                while (pos<lastDot && beforeChars.indexOf(e.charAt(pos)) != -1) {
                        pos++;
                }
        }
        if (pos == 0 || e.charAt(pos++) != "@") {
                return false;
        }
        start = pos;
        while (pos != lastDot) {
                if (pos != start && e.charAt(pos++) != ".") {
                        return false;
                }
                if (legalChars.indexOf(e.charAt(pos++)) == -1) {
                        return false;
                }
                while (pos != lastDot && afterChars.indexOf(e.charAt(pos)) != -1) {
                        pos++;
                }
        }
        pos++;
        for (count=0; pos<e.length && legalChars.indexOf(e.charAt(pos)) != -1 && count<=6; count++) {
                pos++;
        }
        return pos == e.length && count>=2;
}
// chekcer om alle formfelter er udfyldt korrekt
validateForm = function () {
        // er navnet udfyldt
        if (!navn_txt.length) {
                error_txt.text = "Udfyld venligst dit navn";
                return false;
        }
        // er e-mailen udfyldt
        if (!email_txt.length) {
                error_txt.text = "Udfyld venligst din e-mail";
                return false;
        }
        // er e-mail formatet korrekt
        if (!checkEmail(email_txt.text)) {
                error_txt.text = "Der er en fejl i din e-mail";
                return false;
        }
        // er kommentaren udfyldt
        if (!kommentar_txt.length) {
                error_txt.text = "Skriv venligst en kommentar";
                return false;
        }
        // det hele er ok
        return true;
};
// sender mailen
send_mc.onRelease = function() {
        // er formen ok så send mailen
        if (validateForm()) {
                error_txt.text = "";
                var lv:LoadVars = new LoadVars();
                lv.navn = this._parent.navn_txt.text;
                lv.email = this._parent.email_txt.text;
                lv.kommentar = this._parent.kommentar_txt.text;
                lv.sendAndLoad("sendmail.php", lv, "POST");
                //nulstil input felterne
                this._parent.navn_txt.text = "";
                this._parent.email_txt.text = "";
                this._parent.kommentar_txt.text = "";
                //skriv besked til brugeren
                error_txt.text = "Din besked er sendt.";
        }
};
Avatar billede Slettet bruger
10. juli 2007 - 15:01 #1
mon ikke den tilføjelse klare problemet ?

var beforeChars = legalChars+"0123456789-_";
Avatar billede jakobdo Ekspert
10. juli 2007 - 15:07 #2
var legalChars = "abcdefghijklmnopqrstuvwxyzæøå";
Her kunne du tilføje 0-9
Ligesom afterChars.
Avatar billede living8671 Nybegynder
10. juli 2007 - 15:20 #3
ibtage

Tænker du sådan her (det virker ikke):
function checkEmail(e) {
    var legalChars = "abcdefghijklmnopqrstuvwxyzæøå0123456789";
    var beforeChars = legalChars+"0123456789-_";
    var afterChars = legalChars+"0123456789-_";
    var beforeChars = afterChars+"%#";
    var pos = 0;
    var count;
    var start;
Avatar billede living8671 Nybegynder
10. juli 2007 - 15:21 #4
jakobdo

Har prøvet som du skriver, men det virker ikke!!
Andre forslag?
Avatar billede jakobdo Ekspert
10. juli 2007 - 15:26 #5
Det virker ikke logisk.

var legalChars = "abcdefghijklmnopqrstuvwxyzæøå";
var afterChars = legalChars+"0123456789-_";
var beforeChars = afterChars+"%#";

beforeChars indeholder jo netop tal.
Avatar billede Slettet bruger
10. juli 2007 - 15:26 #6
function checkEmail(e) {
        var legalChars = "abcdefghijklmnopqrstuvwxyzæøå";
var beforeChars = legalChars+"0123456789-_";
        var afterChars = legalChars+"0123456789-_";
        var beforeChars = afterChars+"%#";
        var pos = 0;
        var count;
        var start;
Avatar billede living8671 Nybegynder
10. juli 2007 - 15:31 #7
ibtage
Det var et godt forsøg, men den skriver stadig "fejl i email" hvis jeg benytter tal
Har du andre forslag?

jakobdo
Ved godt det virker ulogisk, derfor er jeg også lidt "lost" selv
Avatar billede Slettet bruger
10. juli 2007 - 15:36 #8
Enig ... det er ikke logisk

hvad med at slette denne...
var beforeChars = afterChars+"%#";

eller ændre den :

var beforeChars = beforeChars+"%#";
Avatar billede living8671 Nybegynder
10. juli 2007 - 15:43 #9
ibtage

Har nu prøvet dem begge dele - dog uden at det virker!!
Så snart der kommer tal ind foran @ så virker det ikke, sletter jeg tallene - så virker formen!! Det gælder både på dine forslag, og på det oprindelige script!
Andre forslag? det må da kunne lykkedes :)
Avatar billede living8671 Nybegynder
10. juli 2007 - 15:44 #10
dem begge dele = begge dele :) (beklager)
Avatar billede jakobdo Ekspert
10. juli 2007 - 16:13 #11
Hvad med at ændre nogle af:

legalChars.indexOf til: beforeChars.indexOf
Avatar billede living8671 Nybegynder
10. juli 2007 - 22:40 #12
jakobdo
En mirakel-mager er du.... det virkede sgu til sidst - tak
Avatar billede jakobdo Ekspert
11. juli 2007 - 07:49 #13
Svar!
Avatar billede jakobdo Ekspert
11. juli 2007 - 08:27 #14
Takker for point.
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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