11. november 2005 - 11:28Der er
6 kommentarer og 1 løsning
match vs. replace i check af tekst
Udspringende af debat andetsteds vil jeg da godt høre om nogen kan bekræfte funktionaliteten og mine kommentarer til disse to udtryk.
Javascript !
oStr.match(/^([^\W\d_]|[\s])*$/)
Sammenligner oStr med udtrykket men returnerer ikke noget resultat hvis ikke de er ens. Udtrykket checker at oStr kun indeholder bogstaver og whitespace's...ikke ?
oStr.replace(/[^\w\s]|[\d_]/g, "")
Tager hvilken som helst streng og modificerer den således at den passer på ovenstående .match ... ikke ?
Mnah, jeg mener nu at .match returnerer et array hvis der er en match, og null hvis ikke. Og jeg er klar over at replace fjerner det som regexp udtrykker men mit spørgsmål går mere på om de to regexp jeg har skrevet er hinnandens 'modpoler', altså således at dette :
altid (i IE) vil returnere et array hvor array[0] er en streng der kun indeholder a-z og whitespace's ?
Årsagen til denne 'dobbeltkonfekt' er jo som du også nævner at .match kan fortælle mig om oStr er udfyldt korrekt. .replace kan ikke umiddelbart fortælle om den ændrede noget den kan blot sørge for at oStr opfylder vores regexp.
Forestil dig flg.: (ad_hoc html og script ! - dont copy paste :) )
Navn : <input type='text' onblur='valider(this);'>
function valider(oStr) if(oStr.value.match(/^([^\W\d_]|[\s])*$/)===null) user_alert="Der er fjernet et ulovligt tegn fra navn !"; oStr.value.replace(/[^\w\s]|[\d_]/g, ""); return false;
jeg er klar over at jeg kunne gøre dette istedet :
Okay, så 'null' sidestilles med 'false' i boolean sammenligninger og derfor er den konstruktion som du viser i orden - fint.
Er min brug af | korrekt i f.eks. [^\W\d_]|[\s] ? Korrekt er jo naturligvis afhængig af hvad jeg vil have :) men siger udtrykket : accepter [indholdet af \w minus 0-9 og _] og/'eller' [whitespace's] ?
Nahj, men det er vel heller ikke noget problem..eller ?
Jeg bruger .match for at få at vide om strengen matcher udtrykket /^([^\W\d_]|[\s])*$/ og det returnere præcis hvad jeg forventer på din test streng, nemlig ingenting.
txt.replace(/[^\w\s]|[\d_]/g, "") returnerer en streng som .match(/^([^\W\d_]|[\s])*$/) returnerer 'ok' på.
Det udtryk du bruger herover uden ^ og $ medfører vel (?) at match returnerer så meget som muligt nemlig : kjhio
Men det lader til at de to udtryk er 'modpoler' altså at disse to krav er opfyldt :
Der findes ikke en streng som kan passere denne rutine uden derefter at matche /^([^\W\d_]|[\s])*$/
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.