login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Regex (Opgelost)

Offline valles10 - 27/04/2015 10:39
Avatar van valles10HTML interesse Ik zou willen checken (javascript) of een gegeven string matcht met het volgende:
US.xxxx.xxx

waarbij US vast moet blijven, "xxxx" een jaartal is en de laatste xxx een nummer van 0 - 999. En deze drie groepjes gesplitst met punten.

Iemand die me hierbij kan helpen of een goede tutorial kan aanwijzen? Heb al eventjes gezocht, maar ik vind maar geen deftige tutorial die ik begrijp.


4 antwoorden

Gesponsorde links
Offline Thomas - 27/04/2015 11:14 (laatste wijziging 27/04/2015 11:16)
Avatar van Thomas Moderator Hebben de nummers leading zeroes?
Zijn er nog restricties op het jaartal?

Dit heeft ook tot gevolg als je de getallen (niet) uitvult dat je expressie (g)een vaste lengte heeft.

En als dit een soort van standaard (code) is, is er ongetwijfeld al iemand die hier een regexp voor geschreven heeft.

Anyhoo, mogelijk is dit wat je zoekt (dit zijn dus twee varianten, een waarbij het laatste deel leading zeroes mag hebben, en een waarbij dit niet mag (dit heeft tot gevolg dat je code een variabele lengte kan hebben)):

  1. <!DOCTYPE html>
  2. <title>whee</title>
  3. </head>
  4.  
  5. <script type="text/javascript">
  6. //<![CDATA[
  7. // note /g switch not needed because we only need to do at most one match
  8. // Leading zeroes allowed in second part.
  9. var pattern = /^US\.[0-9]{4}\.[0-9]{3}$/
  10. var subject = 'US.1949.012';
  11. if (pattern.test(subject)) {
  12. // inspect valid domain for year
  13. var parts = subject.split('.');
  14. var year = parseInt(parts[1]);
  15. if (year >= 1950 && year < 2016) {
  16. alert('cake');
  17. } else {
  18. alert('no cake');
  19. }
  20. } else {
  21. alert('no cake');
  22. }
  23.  
  24. // No leading zeroes allowed in the second part.
  25. var pattern = /^US\.[0-9]{4}\.[1-9][0-9]{0,2}$/
  26. if (pattern.test(subject)) {
  27. // idem ...
  28. }
  29. //]]>
  30. </body>
  31. </html>
Bedankt door: valles10
Offline valles10 - 27/04/2015 16:19
Avatar van valles10 HTML interesse het tweede voorbeeld is wat ik zocht!
Wat betekenen die "[1-9][0-9]{0,2}" juist?

/^US\.[0-9]{4}\.
dit stuk begrijp ik.. beginnen met US vervolgens een punt en dit gevolgd door 4 cijfers en weer een punt.
maar dat laatste stuk begrijp ik niet.
Offline Thomas - 27/04/2015 16:50
Avatar van Thomas Moderator [...] controleert één karakter uit een reeks van karakters.
Je kunt ook aangeven dat je meerdere keren een karakter uit deze reeks wilt controleren, dat doe je met {...}. Hierbij kun je aangeven:
- een (sub)patroon precies moet bestaan uit X van deze karakters: {X}
- een (sub)patroon ten minste moet bestaan uit X van deze karakters: {X,}
- een (sub)patroon ten minste moet bestaan uit X van deze karakters, en ten hoogste Y: {X, Y}

[1-9][0-9]{0,2} wil dus zeggen:
Een karakter tussen 1 en 9 ([1-9]), gevolgd door
minimaal 0 en maximaal 2 karakters tussen 0 en 9 ([0-9]{0,2}).

Hiermee heb je dus effectief een regexp die enkel getallen tussen 1 en 999 toestaat.

Dit is overigens echt basis regexp syntax, die je met een eenvoudige Google opdracht ook had kunnen vinden. Of in de tutorials.
Bedankt door: valles10
Offline valles10 - 27/04/2015 16:56
Avatar van valles10 HTML interesse Bedankt!

Tja, ik programmeer al jaren in verschillende talen op verschillende niveau's, maar die regex zijn te veel voor me  
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.307s