Javascript isDate functie werkt niet en ik zie de fout niet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Robbeke
  • Registratie: September 2001
  • Laatst online: 29-12-2018
Dames en Heren,

Ik heb onderstaande functie van internet gehaald en ze aangepast zodat ze zou moeten werken voor de volgende datum notatie: 2011-10-10.
  • Wanneer ik de regex in een online regex tester plaats (zonder de slashes) dan werkt ze.
  • Ik heb al geprobeerd zonder de slashes, met de regex tussen quotes enz....
  • De input datum is juist (alert dateStr geeft correcte datum)
  • Toch werkt de match niet, ik krijg steeds de alert 'Please enter date as eit...'
Kan iemand mij zeggen wat ik hier fout doe? Ik zie het echt niet 8)7

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
function isDate(dateStr) {

  alert(dateStr);
  var datePat = /^(\d{4})(-)(\d{2})(-)(\d{2})$/;
  var matchArray = dateStr.match(datePat); // is the format ok?

  if (matchArray == null) {
    alert("Please enter date as either mm/dd/yyyy or mm-dd-yyyy.");
    return false;
  }
  return true;
 }

http://www.tweakers.net/gallery/sys/2314


Acties:
  • 0 Henk 'm!

  • Spotmatic
  • Registratie: Februari 2003
  • Laatst online: 21:04

Spotmatic

Ken sent me

Waarom is het in jouw code

JavaScript:
1
var datePat = /^(\d{4})(-)(\d{2})(-)(\d{2})$/;


En geen:

JavaScript:
1
var datePat = "/^(\d{4})(-)(\d{2})(-)(\d{2})$/";

[ Voor 5% gewijzigd door Spotmatic op 11-10-2011 08:34 ]

Trotse Volkswagen T1 en T3 bezitter


Acties:
  • 0 Henk 'm!

Verwijderd

Zoals Spotmatic aangeeft, quotes vergeten :)

Acties:
  • 0 Henk 'm!

  • Struikrover
  • Registratie: Juni 2005
  • Laatst online: 20-09 12:08
En los daarvan, ik heb je script even getest en hij werkt bij mij gewoon... google chrome btw.
Maar wat hierboven gezegd wordt is waar: je moet altijd een string van je match pattern maken. Dus dubbele quotes om je pattern heen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!DOCTYPE html>
    <html>
        <head>
            <script type="text/javascript">
                function isDate(dateStr) { 
                    
                      alert(dateStr); 
                      var datePat = /^(\d{4})(-)(\d{2})(-)(\d{2})$/; 
                      var matchArray = dateStr.match(datePat); // is the format ok? 
                    
                      if (matchArray == null) { 
                        alert("Please enter date as either mm/dd/yyyy or mm-dd-yyyy."); 
                        return false; 
                      } 
                      return true; 
                     }
            </script>
        <body>
            <div id="jstest">
                <script type="text/javascript">
                    alert(isDate("2011-05-02"));
                </script>
            </div>
        </body>
    </html>

[ Voor 7% gewijzigd door Struikrover op 11-10-2011 08:37 ]


Acties:
  • 0 Henk 'm!

  • The_Ghost16
  • Registratie: Januari 2004
  • Laatst online: 19-05 10:05
Je fout melding komt ook niet overeen met het datum formaat wat je test ;)

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Verwijderd schreef op dinsdag 11 oktober 2011 @ 08:35:
Zoals Spotmatic aangeeft, quotes vergeten :)
Spotmatic schreef op dinsdag 11 oktober 2011 @ 08:33:
Waarom is het in jouw code

JavaScript:
1
var datePat = /^(\d{4})(-)(\d{2})(-)(\d{2})$/;


En geen:

JavaScript:
1
var datePat = "/^(\d{4})(-)(\d{2})(-)(\d{2})$/";
Javascript regex syntax heeft geen quotes nodig. Een / is een "quote" voor regex.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Robbeke
  • Registratie: September 2001
  • Laatst online: 29-12-2018
Met of zonder quote maakt geen verschil (zoals in startpost aangegeven en bevestigd door MueR). Heb het net getest en het werkt met quotes ook niet (Firefox 7.0.1. en IE9)

@The_Ghost16: dat weet ik, maar ik pas de rest pas aan als de functie ook effectief werkt ;)

[ Voor 4% gewijzigd door Robbeke op 11-10-2011 08:51 ]

http://www.tweakers.net/gallery/sys/2314


Acties:
  • 0 Henk 'm!

  • Zamalan
  • Registratie: September 2007
  • Laatst online: 26-02-2015

Zamalan

Whine Connaisseur

Het voorbeeldje van Struikrover werkt hier gewoon op Firefox 7.0.1 en IE8.

Spaties zie je niet in je alert dus misschien eerst trimmen?

MSI GX660 --- i5 460M /// 4GB DDR3 /// Mobility Radeon HD5870 /// 1920x1080 /// 500GB


Acties:
  • 0 Henk 'm!

  • Robbeke
  • Registratie: September 2001
  • Laatst online: 29-12-2018
Hmm... de test van struikrover werkt bij mij ook, maar op mijn pagina werkt het niet?

Spaties kunnen niet, het veld accepteert maar maximum 10 karakters en is readonly omdat er een date selector aan gekoppeld is. Toch heb ik een trim functie toegevoegd zonder resultaat.

Ik roep de functie zo op:

JavaScript:
1
2
3
if(!isDate(document.getElementById('daily_start').value)) {

}


enig idee? :?

[ Voor 7% gewijzigd door Robbeke op 11-10-2011 09:11 ]

http://www.tweakers.net/gallery/sys/2314


Acties:
  • 0 Henk 'm!

  • farmertjes
  • Registratie: Maart 2010
  • Laatst online: 02-06 20:29
Werkt:

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!DOCTYPE html>
    <html>
        <head>
            <script type="text/javascript">
                function isDate(dateStr) { 
                    
                      alert(dateStr); 
                      var datePat = /^(\d{4})(-)(\d{2})(-)(\d{2})$/; 
                      var matchArray = dateStr.match(datePat); // is the format ok? 
                    
                      if (matchArray == null) { 
                        alert("Please enter date as either mm/dd/yyyy or mm-dd-yyyy."); 
                        return false; 
                      } 
                      return true; 
                     }
            </script>
        <body>
        <input readonly="readonly" type="text" id="daily_start" value="2010-10-10"/>
            <div id="jstest">
                <script type="text/javascript">
                    function Test(){
                    isDate(document.getElementById('daily_start').value)  

                    }
                    Test();
                </script>
            </div>
        </body>
    </html>

[ Voor 214% gewijzigd door farmertjes op 11-10-2011 09:39 . Reden: te snel gekeken ]

flickr


Acties:
  • 0 Henk 'm!

  • Robbeke
  • Registratie: September 2001
  • Laatst online: 29-12-2018
Nevermind :P

[ Voor 5% gewijzigd door Robbeke op 11-10-2011 09:29 ]

http://www.tweakers.net/gallery/sys/2314


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Ga eens wat aan debuggen doen. Ik zie voorlopig alleen nog maar "ik heb dit script van internet afgetrokken, wil het aanpassen, maar ik snap het niet". Met wat basaal debugwerk zou je in ieder geval moeten kunnen vinden waar het aan ligt. Werkt je regex bijvoorbeeld goed, komt de value vanuit je form goed aan en meer van die vragen.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • farmertjes
  • Registratie: Maart 2010
  • Laatst online: 02-06 20:29
Gebruikt je datapicker misschien "/" als seperator (zie je melding aan de gebruiker) want je regex keurt alleen maar "-" goed. (zie voor werkend voorbeeld mijn aangepaste post hierboven).

flickr


Acties:
  • 0 Henk 'm!

  • Robbeke
  • Registratie: September 2001
  • Laatst online: 29-12-2018
@MueR:
Ik heb reeds gedebugged alvorens ik de topic heb geopend.
- Ik heb de alert toegevoegd om te checken of mijn input correct is en de alert(DateStr) geeft een correcte datum weer
- ik heb de regex online getest en gevalideerd dat hij OK moet zijn
- Ik begrijp echt wel wat die functie doet

@farmertjes: de datepicker geeft een waarde met koppeltekens terug. De alert(DateStr) geeft een correcte datum weer. De melding is enkel een tekstboodschap die ik nog moet corrigeren.

[ Voor 7% gewijzigd door Robbeke op 11-10-2011 10:11 ]

http://www.tweakers.net/gallery/sys/2314


Acties:
  • 0 Henk 'm!

  • Robbeke
  • Registratie: September 2001
  • Laatst online: 29-12-2018
Ondertussen werkt het :>

Er zat een synthax fout in de declaratie van het script block waar de functie in stond 8)7

Blijkbaar te wijten aan bug in het templating system die de regex aanpast :X

topic.close(); O-)

[ Voor 30% gewijzigd door Robbeke op 11-10-2011 10:18 ]

http://www.tweakers.net/gallery/sys/2314


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 21:18

crisp

Devver

Pixelated

Even nog wat tips:

Als je alleen wilt weten of een string een expressie matched kan je beter de test-method van een expressie gebruiken. En aangezien je geen submatches nodig hebt zijn de groeperingen in je expressie ook overbodig:

JavaScript:
1
2
3
4
function isDate(dateStr)
{
    return /^\d{4}-\d{2}-\d{2}$/.test(dateStr);
}


of nog iets preciezer:

JavaScript:
1
2
3
4
function isDate(dateStr)
{
    return /^(19|20)\d{2}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$/.test(dateStr);
}


of heel precies (en hier dan wel match gebruikt):

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function isDate(dateStr)
{
    var match = dateStr.match(/^(\d{4})-(\d{2})-(\d{2})$/), date;
    if (match)
    {
        match[2] -= 1; // JS month starts at 0

        date = new Date(match[1], match[2], match[3]);

        return date.getFullYear() == match[1]
            && date.getMonth() == match[2]
            && date.getDate() == match[3];
    }

    return false;
}


have fun :)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Een slotje is niet nodig op een topic als je je oplossing hebt. Zie daarvoor ook onze faq betreffende topiceinde.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Robbeke
  • Registratie: September 2001
  • Laatst online: 29-12-2018
@crisp: Ik heb de matches wel nodig voor latere controles, maar die had ik hier even uitgehaald omdat ze niet van belang zijn. Bedankt voor de andere nuttige tips!

http://www.tweakers.net/gallery/sys/2314

Pagina: 1