Avatar billede listende-elg Nybegynder
21. oktober 2003 - 14:49 Der er 21 kommentarer og
2 løsninger

Validere kundenummer

Jeg har et system hvor folk der bestiller skal indtaste telefonnummer. Dette skal selvfølgelig valideres - og det har jeg også fået gjort. Nu har kunden imidlertid informeret mig om at enkelte kunder har et kundenummer der skal indtastes i stedet for telefonnummer. Kundenummeret har følgende format:

0100000
0200000
..
2500000

Jeg vil gerne kunne checke om teksten indtastet i et tekstfelt er ENTEN et telfonnr. eller et af ovennævnte kundenumre. Jeg koder normalt kun VBScript, og da jeg gerne vil være sikker på at alle det virker på alle browsere, skal jeg altså bruge det i JavaScript.

Pt. ser min kode ud som nedenfor - det er ikke skide optimalt, det ved jeg, men hvis det kan flettes ind her, er det helt perfekt. Ellers modtager jeg også gerne bud på en omskrivning af nedenstående.

if (document.all('tlf').value == '')
    {
    alert ('Du skal udfylde feltet \"Telefonnr.\"');
    }
else
    {
    if (document.all('tlf').value.length != 8)
        {
        alert ('Dit telefonnr. skal være på 8 cifre.');
        }
    else               
        {
        if (isNaN(document.all('tlf').value) == true)
            {
            alert ('Dit telefonnummer må kun indeholde tal');
            }
        else
Avatar billede listende-elg Nybegynder
21. oktober 2003 - 15:03 #1
Generelt søger jeg faktisk en der har mod på at konveretere en række (mindre) VBScripts til JavaScript på timeløn. Jeg er selvstændig programmør, og udvikler som nævnt i VB / VB.Net normalt. Skriv hvis det har interesse.
Avatar billede skovenborg Nybegynder
21. oktober 2003 - 15:04 #2
Måske noget i den her stil:
if (document.formnavn.tlf.value.length < 7 || document.formnavn.tlf.value.length > 8) alert ('Indtast et rigtigt telefon/kundenummer');
else;
Avatar billede listende-elg Nybegynder
21. oktober 2003 - 15:07 #3
Ikke helt. Den skal også checke om værdien af de første to felter er imellem 1 og 25, samt om resten er nuller. Så det skal altså passe 100% på skabelonen... Men ellers er idéen fin.
Avatar billede skovenborg Nybegynder
21. oktober 2003 - 15:17 #4
Måske ikke det skønneste kode:
<script type="text/javascript">
function valider()
{
frm = document.formnavn.tlf.value;
if (frm.length == 7)
{
    if (parseInt(frm.substr(0,2)) < 1 || parseInt(frm.substr(0,2)) > 25)
        {
            alert('Indtast et rigtigt kundenummer');
            return false;
        }
    else
        {
            if (parseInt(frm.substr(2))) {alert('Indtast et rigtigt kundenummer');return false;}
            else return true;
        }
}
else if (frm.length == 8) return true;
else {alert('Indtast et rigtigt kunde/telefonnummer');return false;}
}
</script>

<form name="formnavn">
<input type="text" name="tlf" maxlength="8">
<input type="button" onclick="valider();" value="VALIDER">
</form>
Avatar billede skovenborg Nybegynder
21. oktober 2003 - 15:30 #5
eller på denne måde - chekker også om telefonnummeret er rigtigt (uden bogstaver og den slags:
function valider()
{
frm = document.formnavn.tlf.value;
if (frm.length == 7)
{
    if (parseInt(frm.substr(0,2)) < 1 || parseInt(frm.substr(0,2)) > 25) retur = fejl("Indtast et rigtigt kundenummer");
    else if (parseInt(frm.substr(2)) != 0) retur = fejl('Indtast et rigtigt kundenummer');
        else retur = true;
}
else if (parseInt(frm).toString().length == 8) retur = true;
else retur = fejl('Indtast et rigtigt kunde/telefonnummer');
return retur;
}
function fejl(tekst)
{
alert(tekst);
return false;
}
Avatar billede skovenborg Nybegynder
21. oktober 2003 - 15:38 #6
igrunden behøver du ikke skrive retur = ...., men blot skrive return ....

og så dropppe return retur til sidst :-)

Angående opgaven med vbscript (for løn) - kan du stille den inde i Opgave-kategorien. Bare husk at du ikke skal give point hvis du også udlover andet (fx penge). Det sådan en regel vi har herinde :-)
Avatar billede olebole Juniormester
21. oktober 2003 - 16:26 #7
<ole>

function val(f) {
    var t = f.tal;
    if ( t.value=="" ) {
        alert("Du skal udfylde feltet \"Telefonnr.\"");
        t.focus()
        return false;
    }
    else if ( t.value.length<8 && t.value.match(/^[0-9]{1,2}0{5}$/g) && t.value.replace(/0/g,"")!="" && parseInt(t.value.replace(/0/g,""))<26 ) {
        return true
    }
    else if ( !t.value.match(/^[0-9]{8}$/gi) ) {
        alert("Dit telefonnr./kundenr. er forkert formateret");
        t.focus()
        return false;
    }
}
</script>

<form onsubmit="return val(this)">
<input type="text" name="tal">
</form>

Og vedr. VBS-oversættelse:
  kodehode [krøllet-snabel] yahoo [prik] dk
Undskyld formatet, men det er for at undgå robottering af e-mail-adressen  ;o)

/mvh
</bole>
Avatar billede olebole Juniormester
21. oktober 2003 - 16:32 #8
Sorry, der var en fejl i min Reg-Exp:


    else if ( t.value.length<8 && t.value.match(/^[0-9]{2}0{5}$/g) && t.value.replace(/0/g,"")!="" && parseInt(t.value.replace(/0/g,""))<26 ) {
        return true
    }

Så fungerer den  :)
/mvh
Avatar billede skovenborg Nybegynder
21. oktober 2003 - 16:49 #9
[krøllet-snabel] og [prik] - den har jeg nu aldrig set før når man prøver at slippe for spam ;-) (men det virker vel fortræffeligt)

Er der egentlig nogen større forskel på dit og mit script olebole??? (ud over at du bruger regexp og jeg bare almindelig if...else -formpjat... (ikke fordi jeg påstår min er bedre)
Avatar billede olebole Juniormester
21. oktober 2003 - 17:02 #10
Hmmm ... jeg har på fornemmelsen, spørgeren ikke rigtig har tænkt spørgsmålet ordentligt igennem.
Hvis ikke, der er (i kundenummeret) tale om et tal mellem 1 og 25 - efterfulgt af 5 nuller. Kan næsten et hvilket somhelst tal accepteres - og validering nærmest overflødigt ...(?)

Ja, der er stor forskel på dit og mit script. Mit checker (udover den tomme streng) for, om der er tale om et tal mellem 1 og 25, efterfulgt af 5 nuller.
Eller er et 8-ciffret tal.
/mvh
Avatar billede skovenborg Nybegynder
21. oktober 2003 - 17:09 #11
det gør min egentlig også, bare på en anden - måske dårligere måde:
if (parseInt(frm.substr(0,2)) < 1 || parseInt(frm.substr(0,2)) > 25) retur = fejl("Indtast et rigtigt kundenummer");
    else if (parseInt(frm.substr(2)) != 0) retur = fejl('Indtast et rigtigt kundenummer');

Den chekker bare først om de første to tal er under 1 eller over 25 - og DERERFTER og de sidste cifre er nuller eller hvad de nu er...
Avatar billede olebole Juniormester
21. oktober 2003 - 17:18 #12
Nej, det gør den ikke  :)
parseInt("0virke") returnerer 0
Avatar billede skovenborg Nybegynder
21. oktober 2003 - 17:30 #13
nåja - det en fejl. Sådan nu burde det virke som det skal:
function valider()
{
frm = document.formnavn.tlf.value;
if (frm.length == 7)
{
    if (parseInt(frm.substr(0,2)) < 1 || parseInt(frm.substr(0,2)) > 25) return fejl("Indtast et rigtigt kundenummer");
    else if (frm.substr(2) != "00000") return fejl('Indtast et rigtigt kundenummer');
        else return true;
}
else if (parseInt(frm).toString().length == 8) return true;
else return fejl('Indtast et rigtigt kunde/telefonnummer');
}
function fejl(tekst)
{
alert(tekst);
return false;
}

Smider lige et svar så...medmindre der er flere fejl ;-)
Avatar billede skovenborg Nybegynder
21. oktober 2003 - 17:33 #14
selvfølgelig en meget simpel - men den burde virke :-)
Avatar billede roenving Novice
22. oktober 2003 - 00:08 #15
Måske skulle man bruge:
/^([0-1][\d]|2[0-5])0{5}$/ som kun burde acceptere start på '01'-'25' og slut på '00000'
Avatar billede listende-elg Nybegynder
22. oktober 2003 - 11:28 #16
Jeg tjekker scripts'ne ud senere i dag. Så får den der giver det bedste resultat point. Jo, jeg har tænkt det fint igennem. Jeg ved godt at man kan skrive et hvilket som helst tal som telefonnr., men det er deres eget problem - det bliver alligevel tjekket manuelt, inden det ryger ind i økonomisystemet. Jeg vil bare gerne have den undtagelse, at hvis det passer med et kundenr., så får de lov at submitte alligevel.
Avatar billede roenving Novice
22. oktober 2003 - 11:46 #17
Kom lige til at tænke på, at det slankeste script fik man vel med een regular expression, som tog hele valideringen:

<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Check telefon-/kundenummer</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="javascript" type="text/javascript">
function checkTlf(fld){
    reg = /^(([0-1][\d]|2[0-5])0{5})|\d{8}$/
    if(!fld.value.match(reg)){
        alert('Du skal udfylde telefon-/kundenummer');
        fld.focus();
        return false;
    }
}
</script>
</head>
<body >
<form id="minForm" name="minForm">
Tlf.nr. <input id="minInput" name="minInput" type="text" value="Telefonnummer" onchange="checkTlf(this)" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" size="20">
</form>
</html>
Avatar billede roenving Novice
22. oktober 2003 - 11:52 #18
Hov, jeg havde ikke testet intensivt nok, for der skal stadig checkes for længden (hvorfor egentlig det ?-)

    if(!fld.value.match(reg)||fld.value.length>8){
Avatar billede listende-elg Nybegynder
24. oktober 2003 - 11:19 #19
Hmmm... Jeg endte faktisk med at bruge Roenvigs løsning. Men da han ikke har oprettet sine indlæg som et svar, må jeg vel bare fordele pointene mellem Olebole og Skovenborg?
Avatar billede skovenborg Nybegynder
24. oktober 2003 - 14:38 #20
du skal bare bede ham om at oprette et svar hvis han ikke har det i forvejen.
Avatar billede listende-elg Nybegynder
24. oktober 2003 - 14:46 #21
Skidt, jeg har snakket med ham - så har i andre også fået lidt ud af det :)
Avatar billede roenving Novice
24. oktober 2003 - 14:51 #22
;O)
Avatar billede olebole Juniormester
24. oktober 2003 - 15:13 #23
Jamen, så takker jeg  ;o)
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