19. april 2002 - 22:52Der er
11 kommentarer og 2 løsninger
skal- og må ikke indeholde, på engang
Jeg har ikke rodet så meget med reg.exp før, men jeg kan ikke finde et eksempel, der kan løse mit problem, nogen steder..
En, af en bruger indtastet, tekststreng skal indeholde præcis 8 tegn, alle skal være enten a-z el. 0-9 og min. et tegn fra hver pulje (a-z og 0-9), kan det lade sig gøre?
Hvis det er muligt kunne det være cool med lidt javascript til àlá
if (regstr.test("tststrng")) window.alert("perfekt") else window.alert("er du dum?")
<html> <head> <title>Untitled</title> <script> function udtryk() { var bogstav = 0; var tal = 0; var ialt= 0; var tekst = komiform.teksten.value;; var i= 0; while(i<tekst.length) { if ((tekst.charAt(i)>=0)&&(tekst.charAt(i)<=10)) { tal++ } if ((tekst.charAt(i)>='a')&&(tekst.charAt(i)<='z')) { bogstav++ } ialt++; i++; } if ((tal == 4)&&(ialt==8)) alert("perfekt") else alert("Du er alternativt begavet"); } </script>
</head> <body> <form name = "komiform"> <input type="Text" id = "teksten" >Skriv et ord<br> <input type="Submit" onmousedown="udtryk()"> </form> </body> </html>
Jeg så lige, at jeg havde læst dit spørgsmål forkert som at der skulle være lige mange tal og bogstaver. Her er det ændret, så der bare skal være mindst et af hver slags og ingen forkerte: <html> <head> <title>Untitled</title> <script> function udtryk() { var bogstav = 0; var tal = 0; var ialt= 0; var tekst = komiform.teksten.value;; var i= 0; while(i<tekst.length) { if ((tekst.charAt(i)>=0)&&(tekst.charAt(i)<=10)) { tal++ } if ((tekst.charAt(i)>='a')&&(tekst.charAt(i)<='z')) { bogstav++ } ialt++; i++; } if ((tal)&&(bogstav)&&(ialt==8)&&(ialt==tal+bogstav)) alert("perfekt") else alert("Du er alternativt begavet"); } </script>
</head> <body> <form name = "komiform"> <input type="Text" id = "teksten" >Skriv et ord<br> <input type="Submit" onmousedown="udtryk()"> </form> </body> </html>
det er der ikke specielt meget reg.exp over :D Det er noget ligende jeg bruger nu, men det ligner jo noget der er løgn.. :P ihvertfald hvis man kan nøjes med et enkelt reg.exp test kald
Her er noget kode, der virker, men jeg blev nødt til at se mig slagen på at få RegEx'en til at checke for længden samtidig med (i hvert fald i JavaScript)...
RegEx'en checker for, at strengen kun indeholder a-z og 0-9 og mindst en af hver... og så må jeg så give fortabt og bagefter checke på længden *snøft*
Det er ikke så simpelt at gøre det i eet hug, så her er en løsning i tre hug:
function chktxt( txt ) { var r1 = new RegExp(/^[a-z0-9]{8}$/); // Præcis 8 tegn, bogstaver og cifre var r2 = new RegExp(/[a-z]/); // Mindst et bogstav var r3 = new RegExp(/[0-9]/); // Mindst et ciffer
Helt principielt mener jeg ikke, det er i orden, at du afviser et svar, som faktisk fungerer, inden du har set, om der kommer en bedre løsning på spørgsmålet.
boris -> pricipielt vil jeg da gi' dig ret... jeg er ked af at det ikke er mere tydeligt at det er en reg.exp løsning jeg er ude efter; meeennnn .. eftersom at dette er reg.exp-kategorien og jeg endda begrunder min afvisning, har jeg ikke dårlig smag i munden :D
eeyore -> det er super ... men jeg venter lige og ser om der er en der kan klare det; det er mærkeligt, men jeg er lidt fasineret af denne næsten sprog-uafhængige funktionalitet... måske jeg skulle blive lidt bedre til det.
RegExp er da en fin ting. Og kan det gøres med et enkelt udtryk i dit tilfælde, er det alle tiders. Eksemplet med .match ser glimrende ud - selvom det ikke er den korte version, du efterlyste og ikke er RegExp, men match. Jeg accepterer fuldt ud, at du har afvist mit svar i forhold til de andre svar, der kom til senere; men bestemt ikke, at du gjorde det inden du havde set en bedre (enklere) løsning.
boris > argumentet til match er en regex - det er bare en kortere måde at oprette den på, men man kan da godt dele det op, hvis man vil:
var r = new RegExp(/xxx/);
if(string.match(r)) { .. }
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.