21. maj 2001 - 01:41Der 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)
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.
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>
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\")
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).
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.
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.
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...
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>
Synes godt om
Ny brugerNybegynder
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.