Avatar billede mplag Nybegynder
24. januar 2011 - 16:35 Der er 7 kommentarer og
1 løsning

objRegExp - æ, ø og å (specialtegn)

Hejsa!

Jeg har købt et template fra themeforest som jeg er igang med at tilpasse til min egen hjemmeside - i det template var der en kontaktform der bruger javascript til at validere navnet.

Mit problem er bare at valideringsscriptet ikke vil acceptere de danske tegn æ, ø og å og jeg går derfor også ud fra at det gælder for andre landes specialtegn. Jeg har overhovedet ikke forstand på javascript og har derfor brug for jeres hjælp til at løse dette.

Koden ser sådan ud:


function NameValidation() {

    var inputName = $('#name');
    var wrapName = $('#name_wrap');
    inputName.val(trim(inputName.val()));
    var strValue = inputName.val();

    if(isEmpty(strValue)){
        wrapName.addClass("error");
        return false;
    }
   
    var objRegExp = /^([a-z0-9_\'\-]+ *)*[a-z0-9]+$/i
    if(! objRegExp.test(strValue)){
        wrapName.addClass("error");
        return false;
    }

    wrapName.removeClass("error");

    return true;
}
Avatar billede olsensweb.dk Ekspert
24. januar 2011 - 16:55 #1
ref http://efreedom.com/Question/1-3828601/Regex-Mail-Validating-AE
prøv at rette
  var objRegExp = /^([a-z0-9_\'\-]+ *)*[a-z0-9]+$/i
til
  var objRegExp = /^([ÆØÅæøåa-z0-9_\'\-]+ *)*[ÆØÅæøåa-z0-9]+$/i
Avatar billede olsensweb.dk Ekspert
24. januar 2011 - 17:24 #2
du kan muligvis fjerne stort ÆØÅ da du slutter udtrykket af med /i, hvilke gør udtrykket ufølsomt over for store/små bogstaver.
gad vide om det også gælder special tegn ??
http://www.regular-expressions.info/javascript.html
http://regexlib.com/Default.aspx
http://www.phpartikler.dk/artikler/regexp.php
Avatar billede mplag Nybegynder
24. januar 2011 - 17:40 #3
Har prøvet begge løsninger og desværre er der ingen af dem der dur...

Jeg tænkte på hvor nødvendigt det strengt taget er, at være sikker på at det kun er godkendte tegn der bruges på et simpelt personligt website? Er det i virkeligheden ikke nok bare at sikre at navnefeltet ikke er blankt?
Avatar billede BufferUnderrun Nybegynder
24. januar 2011 - 17:53 #4
Hvis du ikke går så nøje op i det, og bare vil sikre dig noget nogenlunde troværdigt indhold på dansk, kan du bruge den her:

[ .æøåa-z0-9]+

Den skulle fange både æøå som #1 også skriver, samt mellemrum, punktum og tal. F.eks. "Hr. Rævenholt d. 2" ;-)

Dette eksempel bliver i hvert fald godkendt - jeg har lavet en tester her: http://ole.michelsen.dk/tools/regex.html som også benytter JavaScripts RegEx objekt. Det virker fino.
Avatar billede mplag Nybegynder
24. januar 2011 - 18:05 #5
Det kan jeg umiddelbart heller ikke få til at virke i mit script...

Jeg poster lige hele mit valideringsscript for at se om i kan se om der er et eller andet, andet, der gør at det ikke virker...


$(document).ready(function() {

    $('#name').blur(function(){NameValidation();})
    $('#email').blur(function(){EmailValidation();})
    $('#message').blur(function(){MessageValidation();})
    $('#check').blur(function(){SumValidation();})

    $('#submit').click(function() {
        if(! validate())
            return false;
       
        var conf = $('#confirmation');
        conf.text("Your message is being sent ...");
        conf.addClass("confirmation_visible");

        var dataString = $("#chatform").serialize();

        $.ajax({
            url: "scripts/sendMail.php",
            type: "POST",
            data: dataString,
            dataType: "json",
            //timeout: 5000 ,
            success:function(data) {
                if(data.error==true) {
                    conf.text("Your message could not be sent. Please try again later.");
                    conf.addClass("confirmation_visible");
                    setTimeout(function(){
                        conf.removeClass("confirmation_visible");},3000);
                }
                else {
                    conf.addClass("confirmation_visible");
                    conf.text("Your message has been sent.");
                    setTimeout(function(){
                        conf.fadeOut(2000, function(){
                            conf.removeClass("confirmation_visible");
                        });
                    },3000);
                }
            },
            error:function(xhr,err,e) {                           
                conf.text("Your message could not be sent. Please try again later.");
                conf.addClass("confirmation_visible");
                setTimeout(function(){
                    conf.removeClass("confirmation_visible");},3000);
                }
        }); // closing $.ajax()

        return true;
    })     
});


function NameValidation() {

    var inputName = $('#name');
    var wrapName = $('#name_wrap');
    inputName.val(trim(inputName.val()));
    var strValue = inputName.val();

    if(isEmpty(strValue)){
        wrapName.addClass("error");
        return false;
    }
   
    var objRegExp = /^([a-z0-9_\'\-]+ *)*[a-z0-9]+$/i
    if(! objRegExp.test(strValue)){
        wrapName.addClass("error");
        return false;
    }

    wrapName.removeClass("error");

    return true;
}


function EmailValidation() {

    var emailInput = $('#email');
    var wrapEmail = $('#email_wrap');

    emailInput.val(trim(emailInput.val()));
    var strValue = trim(emailInput.val());
   
    var emailExp = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/;
    if(isEmpty(strValue)) {
        wrapEmail.addClass("error");
        return false;
    }

    if(!strValue.match(emailExp)) {
        wrapEmail.addClass("error");
        return false;
    }

    wrapEmail.removeClass("error");

    return true;
}

function MessageValidation() {

    var messageInput = $('#message');
    var wrapMessage = $('#message_wrap');

    messageInput.val(trim(messageInput.val()));
    var strValue = trim(messageInput.val());

    if(isEmpty(strValue)) {
        wrapMessage.addClass("error");
        return false;
    }

    wrapMessage.removeClass("error");
 
    return true;
}

function SumValidation() {

    var sumInput = $('#check');
    var wrapSum = $('#check_wrap');

    var strValue = trim(sumInput.val());
    if(isEmpty(strValue))    {
        wrapSum.addClass("error");
        return false;
    }
   
    if(isNaN(strValue)) {
        wrapSum.addClass("error");
        return false;
    }

    var n1 = parseInt(($('#n1')).text(), 10);
    var n2 = parseInt(($('#n2')).text(), 10);
    var s  = parseInt(strValue, 10);
    if((n1+n2)!= s) {
        wrapSum.addClass("error");
        return false;
    }

    wrapSum.removeClass("error");

    return true;
}

function validate() {

    var valid = true;

    if(!NameValidation())
        valid = false;
    if(!EmailValidation())
        valid = false;
    if(!MessageValidation())
        valid = false;
    if(!SumValidation())
        valid = false;

    return valid ;
}

function trim(stringToTrim) {
    return stringToTrim.replace(/^\s+|\s+$/g,"");
}

function isEmpty(strValue) {
    if(strValue.length == 0)
        return true;
    return false;
}

Avatar billede olsensweb.dk Ekspert
24. januar 2011 - 19:50 #6
sidste bud, pattern skal starte og slutte med en /
hvis vi arbejder lidt mere på #4
objRegExp = /^[ .æøåa-z0-9]+$/


hvis det virker kan du prøve at tilføje i i slutningen så det ser sådan ud

objRegExp = /^[ .æøåa-z0-9]+$/i


jeg kan ikke lige se hvordan #4 tillader store bogstaver, i hans tester har han nok bare sat flueben i "Case-insensitive"


det her regex der kan jeg godt mærker jeg er ude på dybt vand :)
må hellere læse denne guide igen http://www.eksperten.dk/guide/Programmering/RegExp/ ,og ellers begynde at arbejde noget mere med det. 
http://stackoverflow.com/questions/2145073/match-dynamic-string-using-regex
http://stackoverflow.com/questions/345194/regular-expression-matching-in-jquery
Avatar billede mplag Nybegynder
24. januar 2011 - 22:19 #7
Still no luck - men det må næsten være noget andet der er galt, for efter at have brugt det meste af aftenen på at læse om det - virker det som om de foreslåede løsninger burde have virket...

Indtil videre har jeg valgt en mere low-tech løsning på problemet - jeg lader bare valideringsscriptet tjekke om feltet er tomt eller ej. Det er ultra simpelt i forhold til det andet, men i det mindste virker det...

Læg et svar og så er ryger halvdelen af pointene i din retning som tak for hjælpen.
Avatar billede olsensweb.dk Ekspert
25. januar 2011 - 22:00 #8
>Still no luck
surt
jeg har leget lidt med det idag, her er hvad jeg er kommet frem til endtil nu http://olsensweb.dk/test/experten/spm/929807/ ,men legen forsætter
jeg leger med email validering, da det kunne værer et oplagt brugernavn, og selvføgelig også fornavn/(mellem)/efternavn hvilke kan indeholde æøå
telefon / post nummer kom på plads http://www.eksperten.dk/spm/929642 #3

hvis du bruger FF kan jeg anbefale denne addon https://addons.mozilla.org/en-US/firefox/addon/regular-expressions-tester/ så du kan teste dit regulære udtryk
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