21. april 2008 - 13:10Der er
8 kommentarer og 1 løsning
Java: Regex problem
Jeg skal bruge en regex der tjekker om en string indeholder tal og bogstaver (Den skal minimum indeholde et tal og et bogstav). Nedenstående kode udskriver NOT hele tiden.
Nu acceptere den hvis man kun indtaster bogstaver eller tal, jeg vil gerne have den til at man minimum skal have et bogstav, et tal og evt. et tegn i pass.
Ja undskyld, dårlig formuleret. Med tegn mener jeg et special tegn! Men ved ikke om det er muligt? Er du sød at forklare hvad ?=.*? gør? Kan godt se at den sikre at der minimum bliver indtastet et tal/bogstaver.
Okay har lige læst lidt i dine artikler, ros herfra. Og har læst om positive lookaheads, så det den gør hvis jeg har forstået ret er at [a-z0-9@#£¤$%&] matcher det der fx står i første paretens ?=.*?[@#£¤$%&] osv. Okay jeg er en skovl til at forklare det. Men kan ikke se hvor den siger at det minimum skal være der en gang, men bare 0 til mange?
Der er ingen som siger at regexp er løsningen på al verdenens problemer. F.eks. kan det ikke gøre meget mere kompakt hvis det absolut skal gøres i en omgang. Løsningen kan sagtens laves "pænere" hvis man vælger at dele den ud over et tjek pr. betingelse.
> Og har læst om positive lookaheads, så det den gør hvis jeg har forstået ret er at [a-z0-9@#£¤$%&] matcher det der fx står i første paretens ?=.*?[@#£¤$%&] osv.
Delmønsteret [a-z0-9@#£¤$%&]* angiver hvilke tegn som er lovlige tegn. Tilføjer man bare et tegn som ikke er matchet af denne det, vil matchningen som helhed fejle.
Det er de derimod enkelte lookahead-led, som f.eks. (?=.*?[a-z]), der sikre at passwordet heller ikke matches hvis der er mindste et bogstav (et af tegnene a-z).
Jeg indrømmer gerne at de er svære at forstå endsige forklare. Det eneste der hjælper er erfaring og en masse forsøg.
Den centrale del ar denne her:
regexp1(?=regexp2)
Et sådant mønster vil kun blive matchet, hvis teksten ”regexp1” efterfølges af teksten ”regexp2”. Den vil derfor matche:
regexp1regexp2
men ikke:
regexp1regexp3
I password-opskriften er regexp1 lig med:
^
og regexp2 lig med
.*?[a-z]
Mønsteret:
^(?=.*?[a-z])
Matcher derfor starten af strengen (^) hvis og kun hvis den efterfølges at et vilkårligt antal tegn (.*?) efterfulgt af et bogstav ([a-z]). Det er den del som sikre at der er mindst et bogstav.
Nu begynder der at ringe nogle klokker :) Mange tak for din tid, og din gode forklaring.
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.
Følg dette spørgsmålOpretPreview
Flere spørgsmål fra Andet programmering kategorien