Toon posts:

[Javascript] RegExp blijft false geven...

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik heb het volgende:

code:
1
2
3
4
var RegExpr2 = new RegExp("^(((0[1-9]|[12]\d|3[01])\-(0[13578]|1[02])\-((1[6-9]|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\-(0[13456789]|1[012])\-((1[6-9]|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\-02\-((1[6-9]|[2-9]\d)\d{2}))|(29\-02\-((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$");
    
    var strTemp = "01-10-2005";
    alert (RegExpr2.test(strTemp));

Dit is om data te valideren. Als ik bovenstande code uitvoer, geeft deze iedere keer een FALSE.
De regular expression werkt perfect, deze heb ik bij http://www.geocities.com/udeleng/regex.htm getest.

code:
1
^(((0[1-9]|[12]\d|3[01])\-(0[13578]|1[02])\-((1[6-9]|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\-(0[13456789]|1[012])\-((1[6-9]|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\-02\-((1[6-9]|[2-9]\d)\d{2}))|(29\-02\-((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$


ik snap niet waarom dit nou steeds een fout oplevert als ik het in mijn eigen Javascript plaats?! Zie ik iets over het hoofd?

  • koraks
  • Registratie: Oktober 2003
  • Niet online
Dat is zondermeer de meest ranzige regex die ik ooit heb gezien :D Maar even zonder dollen, als je een andere regex in je jscript invoert, werkt de boel dan wel? Maw, weet je of het probleem in je regex of in je code zit?

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Je gebruikt een string-representatie van de regexp die je vervolgens door de constructor heenhaalt; dat betekent dat je eventuele escape-tekens dubbel zult moeten escapen.
Als alternatief kan je het ook zo doen:
JavaScript:
1
2
3
4
var RegExpr2 = /^(((0[1-9]|[12]\d|3[01])\-(0[13578]|1[02])\-((1[6-9]|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\-(0[13456789]|1[012])\-((1[6-9]|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\-02\-((1[6-9]|[2-9]\d)\d{2}))|(29\-02\-((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/;

var strTemp = "01-10-2005";
alert (RegExpr2.test(strTemp)); // true

Intentionally left blank


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

koraks schreef op dinsdag 29 maart 2005 @ 17:42:
Dat is zondermeer de meest ranzige regex die ik ooit heb gezien :D
Waarom? Hij is uitgebreid, zodat hij waarschijnlijk echt fatsoenlijk data kan controleren, zodat je niet ergens 31 februari in kan vullen. Ik vermoed zelfs dat deze regexp zelfs niet uitgebreid genoeg is: ik heb niet echt zin om hem helemaal uit te gaan pluizen, maar hij lijkt mij te kort om rekening te kunnen houden met schrikkeljaren.

@TS: Mocht de regexp die je nu gebruikt niet voldoen: er staan er op http://regexplib.com nog een boel. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

-NMe- schreef op dinsdag 29 maart 2005 @ 18:31:
Waarom? Hij is uitgebreid, zodat hij waarschijnlijk echt fatsoenlijk data kan controleren, zodat je niet ergens 31 februari in kan vullen. Ik vermoed zelfs dat deze regexp zelfs niet uitgebreid genoeg is: ik heb niet echt zin om hem helemaal uit te gaan pluizen, maar hij lijkt mij te kort om rekening te kunnen houden met schrikkeljaren.
Dat zou ook wel vrij onzinnig zijn. JavaScript heeft een fantastische Date() implementatie. Daar kun je vrij eenvoudig een datum mee controleren. Hiervoor RegExp gebruiken is proberen te schroeven met een hamer...

Java:
1
2
3
4
5
6
7
8
9
function checkdate(iDay, iMonth, iYear) {
    var sDate = iYear + '/' + iMonth + '/' + iDay;
    var oDate = new Date(sDate);
    return iDay == oDate.getDate();

}

alert(checkdate(29,02,2004)); // true - schrikkeljaar
alert(checkdate(29,02,2003)); // false - geen schrikkeljaar

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Verwijderd schreef op dinsdag 29 maart 2005 @ 18:56:
Dat zou ook wel vrij onzinnig zijn. JavaScript heeft een fantastische Date() implementatie. Daar kun je vrij eenvoudig een datum mee controleren. Hiervoor RegExp gebruiken is proberen te schroeven met een hamer...
Ik zeg ook niet dat het de manier van controleren van een datum is, maar wat ik wel zeg, is dat die regexp zo ranzig niet is als koraks zegt. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
crisp schreef op dinsdag 29 maart 2005 @ 18:20:
Je gebruikt een string-representatie van de regexp die je vervolgens door de constructor heenhaalt; dat betekent dat je eventuele escape-tekens dubbel zult moeten escapen.
Als alternatief kan je het ook zo doen:
JavaScript:
1
2
3
4
var RegExpr2 = /^(((0[1-9]|[12]\d|3[01])\-(0[13578]|1[02])\-((1[6-9]|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\-(0[13456789]|1[012])\-((1[6-9]|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\-02\-((1[6-9]|[2-9]\d)\d{2}))|(29\-02\-((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/;

var strTemp = "01-10-2005";
alert (RegExpr2.test(strTemp)); // true
Dat dubbel escapen werkt idd!

@ -NMe- de regex komt van die die site!!!

Het werkt nu bedankt!
Pagina: 1