Avatar billede johan.o Nybegynder
11. november 2005 - 11:28 Der 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 ?

Mvh. Johan
Avatar billede Slettet bruger
11. november 2005 - 11:52 #1
Match returnerer en boolean, true ved match false ved ikke match.

Din replace fjerner alt i stringen der matcher udtrykket /[^\w\s]|[\d_]
Avatar billede johan.o Nybegynder
11. november 2005 - 13:59 #2
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 :

oStr.replace(/[^\w\s]|[\d_]/g, "").match(/^([^\W\d_]|[\s])*$/)

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 :

if(oStr.value.replace(/[^\w\s]|[\d_]/g, "")!=oStr.value)

men jeg vil godt bruge lidt krudt på at forstå sammenhængende og konsekvenserne af .match i.fb.m. .replace

Mvh. Johan
Avatar billede roenving Novice
11. november 2005 - 14:59 #3
String.match() returnerer ganske rigtigt et array ...

-- og en ofte set konstruktion er f.eks.

if( !tekst.match(/^\d+$/) ){

-- fordi et tomt array har en værdi, som ved boolean operationer regnes for falsk, nemlig et array med 0 elementer, altså det tomme objekt, null !-)
Avatar billede johan.o Nybegynder
11. november 2005 - 16:11 #4
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] ?

Mvh. Johan
Avatar billede roenving Novice
13. november 2005 - 01:52 #5
Prøv f.eks.

<script language="javascript" type="text/javascript">
var txt = "kjhio7 kj98 7jhlku9 87  kjh o7 98kj økå¨p09+0t8y t  n l.ku9";
alert(txt+"\n"+txt.match(/([^\W\d_]|[\s])*/));
</script>

-- der bliver vist ikke så meget tilbage, som du forventer !-)
Avatar billede johan.o Nybegynder
13. november 2005 - 21:04 #6
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])*$/

if(!txt.match(/^([^\W\d_]|[\s])*$/)) {
txt=txt.replace(/[^\w\s]|[\d_]/g, "")) }

og denne if vil altid være false

txt=txt.replace(/[^\w\s]|[\d_]/g, ""));
if(!txt.match(/^([^\W\d_]|[\s])*$/))

...tror jeg :)

Mvh. Johan
Avatar billede johan.o Nybegynder
19. november 2005 - 10:42 #7
Lukker her - tak for hjælpen :)

Mvh. Johan
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester