WN

WN (https://www.wn.se/forum/index.php)
-   Klientsidans teknologier, design och grafik (https://www.wn.se/forum/forumdisplay.php?f=12)
-   -   Nu blir jag galen igen (regexp i javascript) (https://www.wn.se/forum/showthread.php?t=35278)

oddholst 2009-02-20 15:12

Hej.

Jag försöker få en matchningskontroll i javascript om en sträng uppfyller ett visst krav:

Jag har testat med denna och varianter i match():
/\d+;(select|function|url|menu|back|close);[0-9a-zA-Z_\s\.,\?!]+;\d*/

De strängar som den skall kontrollera kan se ut så här:
- Ett tal som är 0 eller mer (obligatoriskt)
- Ett ;-tecken (obligatorisk)
- Ett av sex nyckelord (select|function|url|menu|back|close) (obligatorisk)
- Ett ;-tecken (obligatorisk)
- En text som kan innehålla alla bokstäver, siffror, understreck, mellanslag, punkt, kommatecken, utropstecken eller frågetecken. (ej obligatoriskt)
- Ett ;-tecken (obligatoriskt)
- Ett tal från 0 och uppåt (ej obligatoriskt)

Exempel på strängar
"15;select;Test 7!;4208"
"22;back;Tillbaka;"
"22;close;Stäng;"

turboraketti 2009-02-20 22:33

Dina exempel matchar ditt regexp, sånär som på den sista där "ä" ställer till det. Vad är problemet?

Kanske vill du ha med ^ och $ först resp sist i ditt regexp om strängen måste matcha exakt.

En annan grej: Texten som ej är obligatorisk, borde det inte vara "*" istället för "+"? Med "+" måste strängen vara minst ett tecken.

martine 2009-02-21 12:06

I [] behöver du inte escapa de flesta tecken.

oddholst 2009-02-21 12:50

Nu har jag testat följande regexp i en regexp-testare:
REGex TESTER v1.5.3
Citat:

^[0-9]+;(select|function|url|menu|back|close){1};[\w\s?!._åäöÅÄÖ]+;[0-9]*$
Det fungerar precis som jag vill ha det i testaren men jag får bara null när jag använder det i javascriptet:
thestring.match("^[0-9]+;(select|function|url|menu|back|close){1};[\w\s?!._åäöÅÄÖ]*;[0-9]*$");
Och jag har även testat med "/"-tecken först och sist men i regex-testaren så funkar det inte med dessa tecken.

Edit:
Tro't eller ej, men nu har jag fått det att fungera, tror jag:
"^[0-9]+;(select|function|url|menu|back|close){1};[a-zA-Z0-9 ?!._åäöÅÄÖ]*;[0-9]*$"
"\w\s" verkade inte funka som jag trodde det skulle göra.

turboraketti 2009-02-21 13:46

Jag skulle testat:

thestring.match(/^\d+;(select|function|url|menu|back|close);[^;]*;\d*$/)

- [0-9] eller \d ska inte spela roll
- {1} ska inte behövas
- En sträng som termineras med ; kan matchas med "[^;]*;" (eller ".*?;")

martine 2009-02-21 18:08

Citat:

Originally posted by oddholst@Feb 21 2009, 13:50
thestring.match("^[0-9]+;(select|function|url|menu|back|close){1};[\w\s?!._åäöÅÄÖ]*;[0-9]*$");
Felet är att du använder en sträng - det är ett regexp.

/regexp/

"sträng"


Alla tider är GMT +2. Klockan är nu 16:42.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson