Avatar billede jjense21 Nybegynder
21. maj 2001 - 01:41 Der er 9 kommentarer og
1 løsning

Kontrol af input

Jeg har en del input-bokse, hvorpå jeg skal have lagt et en kontrol for gyldigt input. Det kan jo sikkert laves med javascript, men jeg vil helst hvis det kunne laves vha. regulære udtryk. Desværre har jeg endnu ikke så meget styr på dem, men jeg har da forsøgt mig lidt frem. Dessværre uden held, og derfor ville det være dejligt med lidt hjælp til at komme videre.

Det første tjeck skal være på tlfnr.
et tlfnr skal være 8-cifret og have formater xxxxxxxx
jeg har forsøgt mig med mange forskellige udformninger, som dog alle har haft nedenstående som grundstamme. Jeg ville tro nedenstående sætning sørger for at tal mellem 0 og 9, kommer mindst 8 og max 8 gange(hvilket vil sige præcis 8 gange) Det virker bare ikke.

if (!ereg([0-9]{8,8},$tlfnummer,$r)){etellerandet}

Jeg vil også gerne kunne lave et tjeck på dato, som skal være i formatet
åårr-mm-dd
altså f.eks. 2001-05-20
det vil altså sige før første bindestreg må der stå 4 vilkårlige cifre (må dog ikke starte med 0), efter første bindestreg må der stå 01 02 03 osv. op til 12 (ikke 00). Efter sidste bindestreg må der stå 01 02 03 osv. op til 31 (ikke 00).

Tilsidst skal jeg også bruge en kontrol på klokkeslet i formatet tt.mm (f.eks. 17.20)

Er der en der har lyst til at hjælpe mig ?
Avatar billede monkeysee Nybegynder
21. maj 2001 - 03:04 #1
Her er et regulært udtryk som checker hvorvidt nummeret er på 8 cifre. Tilføj et længde check for at være helt sikker (baseret på en form som har en <form onSubmit=\"return confirmFormat(this);\"> :

<HTML>
<SCRIPT>

check = /\\d{8}\\?/

function confirmFormat(form) {
    OK = re.exec(form.phone.value)   
    if (!OK) {
            alert(\'You entered an invalid phone\')
            form.phone.focus()
            form.phone.select()
        return (false);
    }
        return (true);
}
//-->
</SCRIPT>


Desuden har Netscape endnu mere dokumentation (bl.a hvordan man checker for \"-\" karakterer.

Citat:
*********************************************

In the following example, a user enters a phone number. When the user presses Enter, the script checks the validity of the number. If the number is valid (matches the character sequence specified by the regular expression), the script posts a window thanking the user and confirming the number. If the number is invalid, the script posts a window informing the user that the phone number is not valid.

The regular expression looks for zero or one open parenthesis \\(?, followed by three digits \\d{3}, followed by zero or one close parenthesis \\)?, followed by one dash, forward slash, or decimal point and when found, remember the character ([-\\/\\.]), followed by three digits \\d{3}, followed by the remembered match of a dash, forward slash, or decimal point \\1, followed by four digits \\d{4}.

The Change event activated when the user presses Enter sets the value of RegExp.input.

<HTML><SCRIPT LANGUAGE = \"JavaScript1.2\">
re = /\\(?\\d{3}\\)?([-\\/\\.])\\d{3}\\1\\d{4}/
function testInfo() {  OK = re.exec()  if (!OK)      window.alert (RegExp.input +          \" isn\'t a phone number with area code!\")  else      window.alert (\"Thanks, your phone number is \" + OK[0])}
</SCRIPT>
Enter your phone number (with area code) and then press Enter.<FORM> <INPUT TYPE=\"text\" NAME=\"Phone\" onChange=\"testInfo(this);\"></FORM>
</HTML>

Avatar billede monkeysee Nybegynder
21. maj 2001 - 03:07 #2
UPS! Jeg kom til at paste det forkert script, her er det rigtige (netscape citatet er dog OK, omend lidt rodet...):

<SCRIPT LANGUAGE=\"JavaScript\">
<!--

check = /\\d{8}/

function confirmFormat(form) {

    OK = check.exec(form.phone.value)   
    if (!OK) {
            alert(\'You entered an invalid phone number\')
            form.phone.focus()
            form.phone.select()
        return (false);
    }
  return (true);
}

//-->
</SCRIPT>
Avatar billede erikjacobsen Ekspert
21. maj 2001 - 07:03 #3
jj: ereg og lignende er PHP, mens du kan se ca. i kommentarerne hvordan man
gør i JavaScript. Hvad vil du?
Avatar billede jakoba Nybegynder
21. maj 2001 - 09:18 #4
Felt check i javascript har den store fordel at det sker på clientens egen maskine.
For at teste input med PHP, ASP og hvad der eller er af serverside scriptsprog skal input sendes til serveren og testresultatet sendes retur. det tager grumme meget længere tid.
en god infokilde om regExp\'s i javascript er:
http://developer.netscape.com/docs/manuals/js/client/jsref/index.htm
(søgeord: \"regExp\", \"regular\", \"expressions\")
Avatar billede jjense21 Nybegynder
21. maj 2001 - 11:32 #5
Jeg tror den bedste løsning vil være at lave en kontrol i javascript (noget lignende MonkeySee´s forslag). Jeg er bare lidt usikker på javascript. Scriptet foroven f.eks. sættes igang på form onsubmit. Sådan som scriptet er bygget op, betyder det så at formen ikke bliver submitted, hvis funktionen returnerer false ?
Og det samme hvis man har en funktion der kører på en knap´s onclick. Hvis man sørger for at funktions onclick returnerer false, så bliver man hvor man er, og bliver altså ikke sendt videre (´hvis det er en submit-knap). 
Avatar billede erikjacobsen Ekspert
21. maj 2001 - 11:42 #6
Lav det på onsubmit - det andet kan have sjove reaktioner.

Jo, jakoba, vel er det hurtigere på klienten, men det er ikke nok. Har man ikke
javascript, eller vil man hacke sig ind, får man måske forkerte data på serveren.
Derfor skal alle data også checkes på serveren. Vil man undlade én, bør
det være den på klienten.

(men jj, du må gerne nøjes med JavaScript...)
Avatar billede jjense21 Nybegynder
21. maj 2001 - 13:28 #7
Jeg har kigget lidt på den udemærkede side om javascript, men jeg synes ikke helt jeg kan få det til at virke som det skal. Monkeysee´s script sørger for at checke om tlf-nr er min 8 cifre langt, og udelukkende består af cifrene [0,9]. Desværre godtages f.eks. 0000000000000000000 og det er jo ikke så godt. Kun danske tlf. nr skal kunne indtastes og derfor skal længden være præcis 8 , hverken mere eller mindre.
Som jeg forstår sætningen check = /\\d{8}/ betyder (8) at et ciffer kommer præcis 8 gange. Jeg har forsøgt med check = /\\d{8,8}/, men det virker heller ikke. Det må da kunne klares i et reg. exp uden at skulle til at lave et check på tlf.length.

Avatar billede jjense21 Nybegynder
21. maj 2001 - 15:04 #8
Og hvis jeg så skulle tilføre et form.tlf.length, hvordan skulle det så gøres ?
Jeg har forsøgt med følgende, men det melder false i alle tilfælde

check = /\\d{8}/
function KontrollerForm(form) {
    if (OK = check.exec(form.tlf.value)){
        if (form.tlf.length<=8){
            OK=true;
        }
        else{
            OK=false;
        }
    }
    if (!OK) {
        alert(\'Indtast et gyldigt 8 cifret tlf-nummer i formatet xxxxxxxx\')
        form.tlf.focus()
        form.tlf.select()
        return (false);
    }
    return (true);
}
//-->
</SCRIPT>
Avatar billede monkeysee Nybegynder
21. maj 2001 - 15:57 #9
Du ønsker ikke at lave en conditional statement her:

if (OK = check.exec(form.tlf.value)){

en sådan skal iøvrigt have 2 lighedstegn for at blive accepteret (==)
       
ellers ser det OK ud? Længde checket er der vist ikke nogen vej uden om, med mindre man kan tilføje et check for \"zero\" i slutningen af ens expression. Det skal afprøves...

Avatar billede jjense21 Nybegynder
21. maj 2001 - 17:16 #10
Dette burde da virke, ikke ?
men det gør det ikke. Den melder false i alle tilfælde.

check = /\\d{8}/

function KontrollerForm(form) {
    if (form.tlf.length<=8){
        OK=check.exec(form.tlf.value);
    }
    else{
        OK=false;
    }
   
    if (!OK) {
    alert(\'Indtast et gyldigt 8 cifret tlf-nummer i formatet xxxxxxxx\')
        form.tlf.focus()
        form.tlf.select()
        return (false);
    }
    else{
        return (true);
    }
}
//-->
</SCRIPT>
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