08. januar 2004 - 21:02Der er
19 kommentarer og 1 løsning
Regex's til javascript & PHP
Jeg skal bruge en række regular expression, der skal bruges både til serverside -og clientside validering:
Serverside (PHP) skal de bruges i en standard ereg() og clienside (javascript) skal de bruges således:
if (field.value.match(regex)) // osv
Jeg er ikke helt sikker på, om man kan bruge nøjagtig de samme regex til både PHP og javascript, men det håber jeg - ellers vil jeg gerne høre om det :)
Jeg skal bruge følgende regex's:
Postnummer (4 tegn, kun tal) Navn (2-50 tegn, kun bogstaver) Tlf1 (8 tegn, kun tal) Tlf2 (8-11 tegn, tal samt evt. '+' i STARTEN) CPR# (0808621122 eller 08-08-62-1122) Adresse (2-100 tegn, tal, bogstaver samt '.' (ol.)) - Er ikke helt sikker på denne
Brugernavn (5-10 tegn, ingen specialtegn) Email Url
Skriv venligst kun hvis I er 100% sikre (hvis man kan være det med en regex :P)
Postnummer: /^\d{1,4}$/ 1-4 tegn, så den accepterer ved første tastning Navn: Hvad med mellemrum, forkortede mellemnavne, sammensatte navne og bogstaver med accenter ol. ?-) /^[\w \,\.\-]{1,2}[\w \,\.\-]{0,48}$/i Accepterer word-characters, altså også tal og _ Tlf1: /^\d{1,8}$/ Tlf2: /^\+?\d{1,11}$/ CPR#: /^\d{1,2}\-?\d{0,2}\-?\d{0,2}\-?\d{0,4}$/ Adresse: /^[\w\.\,\- ]{1,2}[\w\.\,\- ]{0,98}$/i
Brugernavn: /^[a-z0-9]{1,5}[a-z0-9]{0,5}$/i i = case Insensitive
Email: Hvor nøjagtigt ?-) For der er en række mærkværdigheder, man kan tage højde for ... /^\w{1}[\w\.\-]*@\w{1}[\w\-]*\.\w{2}\w*$/i kan acceptere visse ugyldige email-adresser -- og den bliver svær at lave enløbende evaluering på, så det har jeg ikke forsøgt på (hvis du fjerner ^ og $ vil en match dog virke løbende !-) URL: Samme som email ... /^(http:\/\/)?(www\.)?[a-z0-9]+\.\w{1,2}\w*(\.\w{1,2}\w*)*$/i -- og samme kommentar som email ...
-- de fleste af ovenstående er varianter af nogen, jeg har prøvet og testet i javascript, men de er ikke aktuelt testet mod dit scenario, ligesom jeg ikke ved om der lige i disse skulle være varianter i php ...
for/mellem/efter navn: Jeg har ikke helt gennemtænkt denne, men tal skal IKKE godkendes! Har heller aldrig hørt om nogen med _ i deres rigtige navn så den skal også ud :)
Da dit scenario er indtastningen _og_ du vil kunne sætte begrænsninger på længden kender jeg ikke andre metoder, endt at sætte muligheden for at skrive det ene tegn også !-)
Jeg har ikke rigtig brug negeringen, så den har jeg heller ikke testet på, men noget i stil med:
Email og url er den udvidede udgave af de simple ...
Eks. email accepterer: minimum 1 word-character, et eller flere w eller .- (accepterer også de ugyldige .. .- og lignende), @, min 1 w, et eller flere w eller - (også ugyldige --), . og mindst 2 w (også ugyldige med tal)
Jeg har lige et par tilføjelser til email-check, da den blandt andet ikke godtager plus i bruger-delen, og kun accepterer et enkelt punktum i host-delen. Email: /^\w{1}[\w\.\-\+]*@(\w{1}[\w\-]*\.)+\w{2}\w*$/i
Med disse ændringer, vil den adresse, jeg bruger her på E også blive accepteret ;-)
var flds = ['Postnummer','navn','Tlf1','Tlf2','CPR','Adresse','Brugernavn','Email','Url']; // name of fields to validate for(i=0;flds.length>i;i++)flds[i]=false;
function validate(field, regex, style1, style2){ if (field.value.match(regex)){ field.style.cssText=style1; flds[field.name] = true; }else{ field.style.cssText=style2; flds[field.name] = false; } checkSubmit(field); }
function checkSubmit(fld){ var ok = true; for(i=0;flds.length>i;i++)ok = ok && flds[i]; fld.form.submit.disabled = !ok; } </script>
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.