[Javascript] probleem met Regular Expressions en een quote

Pagina: 1
Acties:

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 04-05 11:56
Ik heb de volgende Regular Expression die een valid URL test, opzich werkt deze prima, ik gebruik heb zowel serverside als client side, en dat is in VBScript en JavaScript.

In VBScript accepteert hij geen single quotes --> '
Echter in JavaScript wel.

Als ik de Regular Expression voor Javascript echter test op http://www.furtivecode.com/javascript/regexTester.jsp dan geeft hij geen match als ik een quote in de URL heb staan.

In mijn applicatie heb ik een functie die word aangeroepen bij een onkeydown en een onkeyup en test of de regular expression matched, is dat zo dat word een button geenabled, zo niet blijft de button disabled!

Dit is de Regular Expression: ^(http|https)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,/\\\+&%\$#\=~])*[^\.\,\)\(\s]$

Hij wijgert de string echter pas na invoer van 2 x een single quote, maar hij moet dit bij 1 keer ook al doen, ik heb het idee dat het aan de events ligt, dus aan de onkeydown en onkeyup.

Kan iemand mij helpen? :?

  • PolarBear
  • Registratie: Februari 2001
  • Niet online
Urk schreef op maandag 28 februari 2005 @ 17:11:
In VBScript accepteert hij geen single quotes --> '
Echter in JavaScript wel.
Je hebt dus een probleem met de regular expression in Javascript?
In mijn applicatie heb ik een functie die word aangeroepen bij een onkeydown en een onkeyup en test of de regular expression matched, is dat zo dat word een button geenabled, zo niet blijft de button disabled!
Waarom en onkeydown en onkeyup?
Dit is de Regular Expression:
code:
1
^(http|https)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,/\\\+&%\$#\=~])*[^\.\,\)\(\s]$


Hij weigert de string echter pas na invoer van 2 x een single quote, maar hij moet dit bij 1 keer ook al doen, ik heb het idee dat het aan de events ligt, dus aan de onkeydown en onkeyup.
Waar staat die single quote dan?

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 04-05 11:56
PolarBear schreef op maandag 28 februari 2005 @ 17:17:
[...]

Je hebt dus een probleem met de regular expression in Javascript?
Klopt!
Ik heb een invoerveld waarin iemand een URL in moet typen, deze moet tijdens het typen gecontroleerd worden d.m.v. een regular expression in Javascript.
PolarBear schreef op maandag 28 februari 2005 @ 17:17:
[...]

Waar staat die single quote dan?
Die staat er niet, hij moet juist een single quote wijgeren.

[ Voor 20% gewijzigd door Urk op 28-02-2005 17:48 ]


  • Standeman
  • Registratie: November 2000
  • Laatst online: 07:13

Standeman

Prutser 1e klasse

Urk schreef op maandag 28 februari 2005 @ 17:47:
[...]

Klopt!


[...]

Ik heb een invoerveld waarin iemand een URL in moet typen, deze moet tijdens het typen gecontroleerd worden d.m.v. een regular expression in Javascript.


[...]

Die staat er niet, hij moet juist een single quote wijgeren.
Waarom niet elke keydown door alle characters iteraten en kijken of er een ' in voorkomt?

The ships hung in the sky in much the same way that bricks don’t.


  • Urk
  • Registratie: Maart 2000
  • Laatst online: 04-05 11:56
Ik wil 1 methode gebruiken, niet 2, op jouw manier zou ik alles moeten checken zonder regexp. Dat is niet zo handig en veel te omslachtig

  • Da Fox
  • Registratie: Juni 2004
  • Laatst online: 16-01 18:01
deze: http://internet.ls-la.net/folklore/url-regexpr.html ? :P

[ Voor 5% gewijzigd door Da Fox op 28-02-2005 17:56 ]

"Man fears the darkness, and so he scrapes away at the edges of it with fire." - Rei Ayanami


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:48

crisp

Devver

Pixelated

JavaScript:
1
2
3
var str = '^(http|https)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,/\\\+&%\$#\=~])*[^\.\,\)\(\s]$';

alert(str);

Let op wat er met je escape tekens gebeurd. Wat je hier in de alert ziet wordt letterlijk je regexp als je 'm zo in de new RegExp() constructor stopt. Je \. wordt dan gewoon een . en matched dus elk teken - likely ook je quote.
Dus voor gebruik in javascript: dubbel escapen (er staan trouwens een hoop nutteloze escapes in), of door de shorthand constructor halen (//) maar dan moet je wel je forward slashes nog escapen.

Intentionally left blank


  • Urk
  • Registratie: Maart 2000
  • Laatst online: 04-05 11:56
crisp schreef op maandag 28 februari 2005 @ 18:33:
JavaScript:
1
2
3
var str = '^(http|https)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,/\\\+&%\$#\=~])*[^\.\,\)\(\s]$';

alert(str);

Let op wat er met je escape tekens gebeurd. Wat je hier in de alert ziet wordt letterlijk je regexp als je 'm zo in de new RegExp() constructor stopt. Je \. wordt dan gewoon een . en matched dus elk teken - likely ook je quote.
Dus voor gebruik in javascript: dubbel escapen (er staan trouwens een hoop nutteloze escapes in), of door de shorthand constructor halen (//) maar dan moet je wel je forward slashes nog escapen.
Thanks! _/-\o_
Als ik de eerste \. weghaal lijkt het goed te werken...een geldige URL hoeft toch alleen maar a-z, A-Z, 0-9 of een - te bevatten.
Wat bedoel je precies met dubbel escapen? :? Zoiets: \\. ?

Vind het trouwens wel vreemd dat het in VBScript wel goed werkte met die \.

[ Voor 6% gewijzigd door Urk op 28-02-2005 19:39 . Reden: toev ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:48

crisp

Devver

Pixelated

De implementatie van reguliere expressies in javascript en VBScript kan je niet zomaar met elkaar vergelijken...
In javascript is een reguliere expressie een bestaand object met een constructor, methods, properties etcetera. In VBScript zijn het meen ik gewoon functiecalls met strings als parameters.

[ Voor 46% gewijzigd door crisp op 01-03-2005 00:17 ]

Intentionally left blank

Pagina: 1