De extensie ParserFunctions zorgt voor elf extra parserfuncties naast de "magische woorden", die er al waren op MediaWiki.
(Het kan geconfigureerd worden om extra parserfuncties voor tekstbewerking te krijgen; deze functies zijn hier beschreven.)
Al deze functies hebben de syntaxis:
Let op: Als u deze pagina bewerkt, gaat u akkoord met het vrijgeven van uw bijdragen onder de CC0. Zie Helppagina’s Publiek Domein voor meer informatie.
not ceil trunc floor abs exp ln sin cos tan acos asin atan
Binaire
^
* / div mod
+ -
Afronden
round
Logica
= != <> > < >= <=
and
or
Deze functie verwerkt een mathematische expressie en geeft een berekende waarde terug.
Deze functie is ook beschikbaar in Scribunto met de functie mw.ext.ParserFunctions.expr.
{{#expr: expressie }}
De beschikbare operatoren worden rechts genoemd, op volgorde van bewerking. De functie van elke operator. De nauwkeurigheid en het formaat van het resultaat zal per besturingssysteem (waar de wiki op draait) verschillen, dat is ook afhankelijk van het nummerformaat van de taal van de website.
Bij booleanse algebra wordt zero omgezet naar false, elke andere waarde wordt true:
{{#expr: 1 and -1 }} → 1
{{#expr: 1 and 0 }} → 0
{{#expr: 1 or -1 }} → 1
{{#expr: -1 or 0 }} → 1
{{#expr: 0 or 0 }} → 0
Een lege expressie geeft een lege tekst terug. Ongeldige expressies geven een of meerdere foutboodschappen die verwerkt kunnen worden met de functie #iferror:
{{#expr: }} →
{{#expr: 1+ }} → Expression error: Missing operand for +.
De volgorde van operanden is van belang. Een min of plus voor een getal kan als een negatief getal of een positief getal worden gezien, het is dan geen fout in de invoer:
{{#expr: +1 }} → 1
{{#expr: -1 }} → -1
{{#expr: + 1 }} → 1
{{#expr: - 1 }} → -1
NB: bij het gebruik van de uitvoer van magische woorden, moet er een formaataanpassing gedaan worden om komma's te verwijderen en de nummers te vertalen.
{{NUMBEROFUSERS}} geeft 17.787.186, waar we 17787186 willen hebben, wat kan worden verkregen met {{formatnum:{{NUMBEROFUSERS}}|R}}.
Dit is vooral van belang bij talen waar getallen worden vertaald.
In het Bengaals, wordt {{NUMBEROFUSERS}} dan ৩০,০৬১.
De operator mod geeft bij sommige waarden van het tweede argument een verkeerd resultaat:
{{#expr: 123 mod (2^64-1)}} → Division by zero. (maakt een lege string; het zou 123 moeten zijn)
Bij het rekenen met datums (bijvoorbeeld of de huidige datum en tijd na een ander tijdstip is), converteer met {{#time: xNU }} de tijd eerst naar het aantal seconden na 1 januari 1970, dan kunt u eenvoudig datums als getallen optellen of aftrekken.
Afronden
Rounds, het getal wordt links afgerond op een veelvoud van 1/10 verhoogd tot een macht, waarbij de exponent gelijk is aan de afgekapte waarde van het getal rechts.
Om naar boven of naar beneden af te ronden, gebruikt u respectievelijk unaire ceil of floor.
Testgeval
Resultaat
Afrondingsmethode
{{#expr: 1/3 round 5 }}
0.33333
Het laatste cijfer is kleiner dan 5, er treedt dus geen duidelijke afronding op. (0.333333… → 0.33333)
{{#expr: 1/6 round 5 }}
0.16667
Het laatste cijfer is 5 of hoger, er wordt naar boven afgerond (0.166666… → 0.16667)
{{#expr: 8.99999/9 round 5 }}
1
Ook hier wordt het resultaat op het laatste cijfer naar boven afgerond, wat resulteert in extra afronding (0.999998… → 1.00000 → 1)
{{#expr: 1234.5678 round -2 }}
1200
Afgerond op 100 omdat negatieve waarden links van de komma worden afgerond
{{#expr: 1234.5678 round 2 }}
1234.57
Afgerond op de dichtstbijzijnde 100e omdat positieve waarden rechts van het decimaalteken worden afgerond
{{#expr: 1234.5678 round 2.3 }}
1234.57
Decimalen in de afrondingsindex maken geen verschil in het afgeronde resultaat
{{#expr: trunc 1234.5678 }}
1234
Decimaal gedeelte afgekapt
Afronden op het dichtstbijzijnde gehele getal
{{#expr: 1/3 round 0 }}
0
Lager tot aan het dichtstbijzijnde gehele getal, dat nul is
{{#expr: 1/2 round 0 }}
1
Naar boven tot het dichtstbijzijnde gehele getal, dat 1 is
{{#expr: 3/4 round 0 }}
1
Naar boven tot het dichtstbijzijnde gehele getal, dat 1 is
{{#expr: -1/3 round 0 }}
-0
Naar boven tot het dichtstbijzijnde gehele getal, dat 0 is
{{#expr: -1/2 round 0 }}
-1
Naar beneden tot het dichtstbijzijnde gehele getal, dat -1 is
{{#expr: -3/4 round 0 }}
-1
Naar beneden tot het dichtstbijzijnde gehele getal, dat -1 is
Afronden naar boven of beneden met ceil en floor
{{#expr: ceil(1/3) }}
1
Tot het volgende hogere gehele getal (1)
{{#expr: floor(1/3) }}
0
Lager tot aan het dichtstbijzijnde gehele getal (0)
{{#expr: ceil(-1/3) }}
-0
Naar boven tot aan het dichtstbijzijnde gehele getal (0)
{{#expr: floor(-1/3) }}
-1
Naar beneden tot het dichtstbijzijnde gehele getal (-1)
{{#expr: ceil 1/3 }}
0.33333333333333
Niet afgerond, 1 is al een geheel getal
Waarschuwing:
Geïnterpreteerd als (ceil 1)/3, niet ceil(1/3), zoals je zou verwachten
Teksten
Expressies werken alleen met getalachtige waarden, ze kunnen geen tekenreeksen of tekens vergelijken. #ifeq kan in plaats daarvan worden gebruikt.
{{#expr: "a" = "a" }} → Expression error: Unrecognized punctuation character """.
{{#expr: a = a }} → Expression error: Unrecognized word "a".
{{#ifeq: a | a | 1 | 0 }} → 1
#if
Deze functie evalueert een testreeks en bepaalt of deze leeg is of niet. Een testreeks die alleen witruimte bevat, wordt als leeg beschouwd.
{{#if: testreeks | waarde als tekstreeks niet leeg is | waarde als tekstreeks leeg is (of alleen witruimte bevat) }}
{{#if: eerste parameter | tweede parameter | derde parameter }}
Deze functie test eerst of de eerste parameter niet leeg is. Als de eerste parameter niet leeg is, geeft de functie het tweede argument weer. Als de eerste parameter leeg is of alleen witruimtetekens bevat (spaties, nieuwe regels, enz.), wordt het derde argument weergegeven.
{{#if: | yes | no}} → no
{{#if: string | yes | no}} → yes
{{#if: | yes | no}} → no
{{#if:
| yes | no}} → no
De testreeks wordt altijd geïnterpreteerd als pure tekst, dus wiskundige uitdrukkingen worden niet geëvalueerd (zie daarvoor #ifexpr):
{{#if: 1==2 | yes | no }} → yes
{{#if: 0 | yes | no }} → yes
De laatste parameter (false) mag worden weggelatenː
{{#if: foo | yes }} → yes
{{#if: | yes }} →
{{#if: foo | | no}} →
De functie kan genest zijn. Om dit te doen, nest de binnenste #if-functie in zijn volledige vorm in plaats van een parameter van de omsluitende #if-functie. Er zijn maximaal zeven niveaus van nesting mogelijk, hoewel dat afhankelijk kan zijn van de wiki of een geheugenlimiet.
{{#if: testreeks | waarde als tekstreeks niet leeg is | {{#if: testreeks | waarde als tekstreeks niet leeg is | waarde als tekstreeks leeg is (of alleen witruimte bevat) }} }}
U kunt ook een parameter gebruiken als de testreeks in uw #if-afschrift. U moet ervoor zorgen dat u de | (pijpsymbool) achter de naam van de variabele toevoegt.
(Zodat als de parameter geen waarde heeft, deze wordt geëvalueerd naar een lege tekenreeks in plaats van de tekenreeks "{{{1}}}".)
{{#if:{{{1|}}}|U hebt tekst ingevoerd in variabele 1|Er is geen tekst in variabele 1}}
Deze parserfunctie vergelijkt twee invoerreeksen, bepaalt of ze identiek zijn en retourneert een van de twee tekenreeksen op basis van het resultaat.
Als er meer vergelijkingen en uitvoerreeksen nodig zijn, kunt u overwegen #switch te gebruiken.
{{#ifeq: string 1 | string 2 | value if identical | value if different }}
Als beide tekenreeksen geldige numerieke waarden zijn, worden de tekenreeksen numeriek vergeleken:
Anders wordt de vergelijking als tekst gemaakt; Deze vergelijking is hoofdlettergevoelig:
{{#ifeq: foo | bar | equal | not equal}} → not equal
{{#ifeq: foo | Foo | equal | not equal}} → not equal
{{#ifeq: "01" | "1" | equal | not equal}} → not equal(vergelijk met vergelijkbaar voorbeeld hierboven, zonder de aanhalingstekens)
{{#ifeq: 10^3 | 1000 | equal | not equal}} → not equal(vergelijk met vergelijkbaar voorbeeld hierboven, waarbij #expr eerst een geldig nummer retourneert)
Neem als praktisch voorbeeld een bestaande templateTemplate:Timer met behulp van de parser om te kiezen tussen twee standaardtijden, kort en lang.
Het neemt de parameter als eerste invoer om te vergelijken met de tekenreeks "short" - er is geen conventie voor de volgorde, maar het is eenvoudiger te lezen als de parameter als eerste gaat.
De sjablooncode wordt gedefinieerd als:
{{#ifeq: {{{1|}}} | short | 20 | 40 }}
Het volgende volgt:
{{timer|short}} → 20
{{timer|20}} → 40
{{timer}} → 40
Waarschuwing:
Bij gebruik binnen een parserfunctie moeten alle parsertags en andere parserfuncties tijdelijk worden vervangen door een unieke code. Dit is van invloed op vergelijkingen:
{{#ifeq: <nowiki>foo</nowiki> | <nowiki>foo</nowiki> | equal | not equal}} → not equal
{{#ifeq: <math>foo</math> | <math>foo</math> | equal | not equal}} → not equal
{{#ifeq: {{#tag:math|foo}} | {{#tag:math|foo}} | equal | not equal}} → not equal
Als de te vergelijken tekenreeksen als gelijke aanroepen worden gegeven aan dezelfde sjabloon die dergelijke tags bevat, dan is de voorwaarde waar, maar in het geval van twee sjablonen met identieke inhoud die dergelijke tags bevat, is het onwaar.
Waarschuwing:
Letterlijke vergelijkingen met paginanaam, magische woorden kunnen mislukken, afhankelijk van de siteconfiguratie. Zo kan {{FULLPAGENAME}}, afhankelijk van wiki, de eerste letter met een hoofdletter schrijven en alle onderstrepingstekens vervangen door spaties.
Om dit te omzeilen, past u het magische woord toe op beide parameters:
Deze functie neemt een invoerreeks en retourneert een van de twee resultaten; de functie evalueert true of de invoerreeks een HTML-object met class="error" bevat, zoals gegenereerd door andere parserfuncties zoals #expr, #time en $rel 2abs, sjabloon fouten zoals loops en recursies, en andere "failsoft" parserfouten.
{{#iferror: test string | value if error | value if correct }}
Een of beide retourreeksen kunnen worden weggelaten. Als de tekenreeks correct wordt weggelaten, wordt de test string geretourneerd als deze niet onjuist is. Als de tekenreeks error ook wordt weggelaten, wordt een lege tekenreeks geretourneerd bij een fout :
Some errors may cause a tracking category to be added, using {{#iferror:}} will not suppress the addition of the category.
#ifexpr
Deze functie evalueert een wiskundige expressie en retourneert een van de twee tekenreeksen, afhankelijk van de booleaanse waarde van het resultaat:
{{#ifexpr: expression | value if true | value if false }}
De invoer expression wordt precies zo geëvalueerd als voor #expr hierboven, waarbij dezelfde operatoren beschikbaar zijn. De uitvoer wordt vervolgens geëvalueerd als een booleaanse expressie.
Een lege invoerexpressie evalueert naar false:
{{#ifexpr: | yes | no}} → no
Zoals hierboven vermeld, evalueert nul naar false en elke niet-nulwaarde evalueert naar true, dus deze functie is gelijk aan één die alleen #ifeq en #expr gebruikt:
{{#ifeq: {{#expr: expression }} | 0 | value if false | value if true }}
behalve voor een lege of verkeerde invoerexpressie (een foutmelding wordt behandeld als een lege tekenreeks; deze is niet gelijk aan nul, dus we krijgen waarde indien waar).
Een of beide retourwaarden kunnen worden weggelaten; Er wordt geen uitvoer gegeven wanneer de juiste tak leeg is:
{{#ifexpr: 1 > 0 | yes }} → yes
{{#ifexpr: 1 < 0 | yes }} →
{{#ifexpr: 0 = 0 | yes }} → yes
{{#ifexpr: 1 > 0 | | no}} →
{{#ifexpr: 1 < 0 | | no}} → no
{{#ifexpr: 1 > 0 }} →
Boolean operators of equality or inequality operators are supported.
{{#ifexpr: 0 = 0 or 1 = 0 | yes}} → yes
{{#ifexpr: 0 = 0 and 1 = 0 | | no}} → no
{{#ifexpr: 2 > 0 or 1 < 0 | yes}} → yes
{{#ifexpr: 2 > 0 and 1 > 0 | yes | no}} → yes
Waarschuwing:
De resultaten van numerieke vergelijkingen met #ifexpr komen niet altijd overeen met die van #ifeq en #switch. Deze laatste twee zijn nauwkeuriger dan #ifexpr en leveren dus mogelijk geen gelijkwaardige resultaten op.
Beoordeel deze vergelijkingen met het laatste cijfer gewijzigd:
{{#ifeq: 12345678901234567 | 12345678901234568 | equal | not equal}} → not equal
{{#switch: 12345678901234567 | 12345678901234568 = equal | not equal}} → not equal
Omdat PHP die in #ifeq wordt gebruikt en #switch twee getallen van het type geheel getal vergelijkt, wordt het verwachte resultaat correct geretourneerd.
Overwegende dat met #ifexpr en dezelfde aantallen:
Bij het andere cijfer is het resultaat van gelijk eigenlijk onjuist.
Dit gedrag in #ifexpr wordt veroorzaakt doordat MediaWiki letterlijke getallen in expressies omzet in type float, wat voor grote gehele getallen als deze afronding met zich meebrengt.
#ifexist
Deze functie neemt een invoerreeks, interpreteert deze als een paginatitel en retourneert een van de twee waarden, afhankelijk van het feit of de pagina al dan niet op de lokale wiki bestaat.
{{#ifexist: page title | value if exists | value if doesn't exist }}
De functie evalueert naar true als de pagina bestaat, of deze inhoud bevat, zichtbaar leeg is (metagegevens bevat zoals categoriekoppelingen of magic words, maar geen zichtbare inhoud), leeg is of een doorverwijzing is. Alleen pagina's met een rode link worden beoordeeld op false, ook als de pagina bestond maar is verwijderd.
Als een pagina een doel controleert met #ifexist:, wordt die pagina weergegeven in de Special:WhatLinksHere-lijst voor de doelpagina. Dus als de code {{#ifexist:Foo }} op deze pagina is opgenomen (Help:Extension:ParserFunctions/nl), zal Special:WhatLinksHere/Foo Help:Extension:ParserFunctions/nl vermelden.
Op wiki's die een gedeelde repository voor de media gebruiken, kan #ifexist: worden gebruikt om te controleren of een bestand is geüpload naar de repository, maar niet naar de wiki zelf:
Als er een lokale beschrijvingspagina voor het bestand is gemaakt, is het resultaat bestaat voor al het bovenstaande.
#ifexist: werkt niet met interwikilinks.
ifexist limieten
#ifexist: wordt beschouwd als een "dure parserfunctie"; Slechts een beperkt aantal daarvan kan op één pagina worden opgenomen (inclusief functies in transclude sjablonen).
Als deze limiet wordt overschreden, retourneren alle daaropvolgende #ifexist:-functies automatisch false, ongeacht of de doelpagina bestaat of niet, en wordt de pagina gecategoriseerd in Category:Pages with too many expensive parser function calls.
De naam van de volgende categorie kan variëren afhankelijk van de taal van uw wiki.
Voor sommige testgevallen is het mogelijk om het ifexist effect te emuleren met css, door gebruik te maken van de selectors a.new (om links naar niet-bestaande pagina's te selecteren) of a:not(.new) (om links naar bestaande pagina's te selecteren).
Bovendien, aangezien het aantal dure parserfuncties dat op een enkele pagina kan worden gebruikt, wordt beheerd door $wgExpensiveParserFunctionLimit, kan men ook de limiet in LocalSettings verhogen.php.
Ongeldige syntaxis, zoals /. of /./, wordt genegeerd.
Aangezien er niet meer dan twee opeenvolgende volledige stops zijn toegestaan, kunnen reeksen zoals deze worden gebruikt om opeenvolgende instructies te scheiden:
{{#rel2abs: ../../../../quok | Help:Foo/bar/baz }} → Error: Invalid depth in path: "Help:Foo/bar/baz/../../../../quok" (tried to access a node above the root node).
Voor een vergelijkbare groep functies zie ook Bij de Magische woorden de URL-gegevens.
Interne parserfuncties bevatten: 'localurl:', 'fullurl:', 'anchorencode:' enz.
Deze functie vergelijkt één invoerwaarde met verschillende testgevallen en retourneert een gekoppelde tekenreeks als er een overeenkomst wordt gevonden.
{{#switch: comparison string
| case = result
| case = result
| ...
| case = result
| default result
}}
{{#switch: zzz | foo = Foo | baz = Baz | Bar }} → Bar
#switch met gedeeltelijke transclusie-tags kan van invloed zijn op een configuratiebestand waarmee een editor die niet bekend is met sjablooncodering configureerbare elementen kan bekijken en bewerken.
Standaardwaarde
Het standaardresultaat wordt geretourneerd als er geen case tekenreeks overeenkomt met de vergelijkingsreeks:
{{#switch: test | foo = Foo | baz = Baz | Bar }} → Bar
In deze syntaxis moet het standaardresultaat de laatste parameter zijn en mag het geen onbewerkt gelijkteken bevatten (een gelijkteken zonder {{}}).
Als dit wel het geval is, wordt het behandeld als een vergelijking en wordt er geen tekst weergegeven als er geen gevallen overeenkomen.
Dat komt omdat de standaardwaarde niet is gedefinieerd (leeg is).
Als er een case echter overeenkomt, wordt de bijbehorende tekenreeks geretourneerd.
{{#switch: test | Bar | foo = Foo | baz = Baz }} →
{{#switch: test | test = Foo | baz = Baz | B=ar }} → Foo
Als alternatief kan het standaardresultaat expliciet worden aangegeven met een case string van "#default".
{{#switch: comparison string
| case = result
| case = result
| ...
| case = result
| #default = default result
}}
Standaardresultaten die op deze manier zijn gedeclareerd, kunnen overal in de functie worden geplaatst:
{{#switch: test | foo = Foo | #default = Bar | baz = Baz }} → Bar
Als de parameter default wordt weggelaten en er geen overeenkomst wordt gemaakt, wordt er geen result geretourneerd:
{{#switch: test | foo = Foo | baz = Baz }} →
Resultaten groeperen
Het is mogelijk om 'doorval'-waarden te hebben, waarbij meerdere case tekenreeksen dezelfde result tekenreeks retourneren. Dit minimaliseert dubbel werk.
Hier wordt bij 2, 3 en 4 allemaal result234 terug; Bij 6 en 7 is het resultaat result67.
De "#default = " in de laatste parameter kan in het bovenstaande geval worden weggelaten.
Met gebruik van parameters
De functie kan worden gebruikt met parameters als testreeks.
In dit geval is het niet nodig om de 'pipe' achter de parameternaam te plaatsen, omdat het zeer onwaarschijnlijk is dat u ervoor kiest om iets in te stellen voor de tekenreeks "{{{parameter name}}}".
(Dit is de waarde die de parameter standaard heeft als de 'pipe' afwezig is en de parameter niet bestaat of een waarde heeft.
Zie Help:Parser functions in templates/nl.)
In het bovenstaande geval, als {{{1}}} gelijk is aan foo, retourneert de functie Foo.
Als het gelijk is aan baz, retourneert de functie Baz.
Als de parameter leeg is of niet bestaat, retourneert de functie Bar.
Net als in het bovenstaande gedeelte kunnen gevallen worden gecombineerd om één resultaat te geven.
Hier, als {{{1}}} gelijk is aan foo, zoo of roo, retourneert de functie Foo.
Als het gelijk is aan baz, retourneert de functie Baz.
Als de parameter leeg is of niet bestaat, retourneert de functie Bar.
Bovendien kan het standaardresultaat worden weggelaten als u niets wilt retourneren als de waarde van de testparameter niet overeenkomt met een van de gevallen.
{{#switch: {{{1}}} | foo = Foo | bar = Bar }}
In dit geval retourneert de functie een lege tekenreeks, tenzij {{{1}}} bestaat en gelijk is aan foo of bar, in welk geval het respectievelijk Foo of Bar retourneert.
Dit heeft hetzelfde effect als het standaardresultaat als leeg verklaren.
Als u om de een of andere reden besluit een case in te stellen als "{{{parameter name}}}", retourneert de functie het resultaat van die case wanneer de parameter niet bestaat of geen waarde heeft.
De parameter moet bestaan en een andere waarde hebben dan de tekenreeks "{{{parameter name}}}" om het standaardresultaat van de functie te retourneren.
In dit hypothetische geval zou u de 'pipe' aan de parameter moeten toevoegen ({{{1|}}}).
Vergelijking gedrag
Net als bij #ifeq wordt de vergelijking numeriek gemaakt als zowel de vergelijkingsreeks als de string die wordt getest numeriek zijn; of als een hoofdlettergevoelige tekenreeks:
{{#switch: 0 + 1 | 1 = one | 2 = two | three}} → three
{{#switch: {{#expr: 0 + 1}} | 1 = one | 2 = two | three}} → one
{{#switch: 02 | +1 = one | +2 = two | three}} → two
Zodra een match is gevonden, worden volgende cases genegeerd:
{{#switch: b | f = Foo | b = Bar | b = Baz | }} → Bar
Waarschuwing:
Numerieke vergelijkingen met #switch en #ifeq zijn niet gelijk aan vergelijkingen in uitdrukkingen (zie ook hierboven):
{{#switch: 12345678901234567 | 12345678901234568 = A | B}} → B
{{#ifexpr: 12345678901234567 = 12345678901234568 | A | B}} → A
Ruwe gelijktekens
"Case"-tekenreeksen mogen geen onbewerkte gelijktekenstekens bevatten. Om dit te omzeilen, gebruikt u het magische woord {{=}}, u maakt een sjabloon {{=}} met een enkel gelijkteken: =, of vervangt u het gelijkteken door HTML-code =.
Aan de andere kant kan de vervanging van de schakelaar ingewikkeld / onpraktisch zijn voor IF's die in beide takken zijn genest (weergegeven met alternatieven voor inspringing, aan beide zijden ingesprongen), waardoor een volledige symmetrische boom ontstaat:
↑Hiervoor is minimaal PHP 5.1.0 vereist en rev:45208.
↑Dit heeft dezelfde waarde als Y, behalve dat als het ISO-weeknummer (W) bij het vorige of volgende jaar hoort, dat jaar in plaats daarvan wordt gebruikt.
↑Zal letterlijk o uitvoeren als noot 1 niet wordt vervuld.
Maand
n
Maandnummer, zonder nul vooraan.
6
m
Maandnummer, met nul vooraan.
06
M
Afkorting van de maand, in de taal van de website.
jun
F
De volledige maand, in de taal van de website.
juni
xg
Geeft de volledige maandnaam in het formulier genitive voor sitetalen die onderscheid maken tussen genitief en nominatief formulieren. Deze optie is handig voor veel Slavische talen zoals Pools, Russisch, Wit-Russisch, Tsjechisch, Slowaaks, Sloveens, Oekraïens, enz.
In het Pools: {{#time:F Y|June 2010|pl}} → czerwiec 2010 (nominatief) {{#time:d xg Y|20 June 2010|pl}} → 20 czerwca 2010 (genitief)
Dag van de maand of het jaar
j
Dag van de maand (met nul vooraan)
11
d
Dag van de maand (met nul vooraan)
11
z
Dag van het jaar (1 januari = 0). Opmerking: Om de ISO-dag van het jaar te krijgen, voegt u 1 toe.
161
Week en dag van de week
W
ISO 8601 weeknummer, met nul vooraan.
23
N
ISO 8601 dag van de week (maandag = 1, zondag = 7).
7
w
Nummer van de dag van de week (zondag = 0, zaterdag = 6).
0
D
Een afkorting voor de dag van de week. Niet vaak geïnternationaliseerd.
zo
l
De volledige doordeweekse naam. Niet vaak geïnternationaliseerd.
Verschil met de Greenwich tijd (GMT), met dubbele punt
+00:00
T
Tijdzone afkorting
UTC
Z
Tijdzone offset in seconden.
0
Diversen
t
Aantal dagen in de huidige maand.
30
c
ISO 8601 geformatteerde datum, gelijkwaardig aan Y-m-d"T"H:i:s+00:00.
2023-06-11T00:07:30+00:00
r
RFC 5322 geformatteerde datum, gelijk aan D, j M Y H:i:s +0000, met weekdagnaam en maandnaam niet geïnternationaliseerd.
Sun, 11 Jun 2023 00:07:30 +0000
Niet-Gregoriaanse kalenders
Islamitisch
xmj
Dag van de maand.
22
xmF
Volledige maandnaam.
Dhu al-Qi'dah
xmn
Maandnummer.
11
xmY
Volledig jaar.
1444
Iraans (Jalaly)
xit
Aantal dagen in de maand.
31
xiz
Dag van het jaar.
82
xij
Dag van de maand.
21
xiF
Volledige maandnaam.
Derde Perzische maand
xin
Maandnummer.
3
xiY
Volledig jaar.
1402
xiy
Jaar in twee cijfers.
02
Hebreeuws
xjj
Dag van de maand.
22
xjF
Volledige maandnaam.
Sivan
xjt
Aantal dagen in de maand.
30
xjx
Genitieve vorm van de maandnaam.
Sivan
xjn
Maand nummer.
9
xjY
Volledig jaar.
5783
Thais zonne
xkY
Volledig jaar in Thaise zonnekalender Opmerking: Voor jaren voor 1941 worden de data in de maanden Jan-Mar niet correct berekend.
2566
Minguo/Juche jaar
xoY
Volledig jaar.
112
Japanse nengo
xtY
Volledig jaar.
令和5
Vlaggen
xn
De volgende numerieke code opmaken als een onbewerkt ASCII-nummer
In de Hindi-taal produceert {{#time:H, xnH}} ०६, 06.
xN
Als xn, maar dan als een vaste vlag, die blijft bestaan tot het einde van de string of tot de volgende verschijning van xn in de string.
xr
Maak het volgende getal op als een Romeins cijfer. Werkt alleen voor getallen tot 10.000 (tot 3.000 in pre MediaWiki 1.20).
{{#time:xrY}} → MMXXIII
xh
Maak het volgende getal op als een Hebreeuws cijfer.
{{#time:xhY}} → ב'כ"ג
Deze parserfunctie neemt een datum en/of tijd (in de Gregoriaanse kalender) en maakt deze op volgens de gegeven syntaxis. Er kan een datum/tijd-object worden opgegeven; de standaardwaarde is de waarde van het {{CURRENTTIMESTAMP}}magische woord, dat wil zeggen het tijdstip waarop de pagina voor het laatst in HTML is weergegeven.
{{#time: format string }}
{{#time: format string | date/time object }}
{{#time: format string | date/time object | language code }}
{{#time: format string | date/time object | language code | local }}
De lijst met geaccepteerde opmaakcodes wordt gegeven in de tabel aan de rechterkant.
Elk teken in de opmaaktekenreeks dat niet wordt herkend, wordt ongewijzigd doorgegeven. Dit geldt ook voor lege ruimtes (het systeem heeft ze niet nodig voor het interpreteren van de codes).
Er zijn ook twee manieren om te ontsnappen aan tekens in de opmaakreeks:
Een backslash gevolgd door een opmaakteken wordt geïnterpreteerd als één letterlijk teken
Tekens tussen dubbele aanhalingstekens worden beschouwd als letterlijke tekens en de aanhalingstekens worden verwijderd.
Bovendien worden de twee tekens xx geïnterpreteerd als een enkele letterlijke "x".
Naarmate de lijst met opmaakcodes blijft evolueren (met de ondersteuning van nieuwe kalenders of van nieuwe datumvelden die anders zijn berekend en opgemaakt), moet u zorgen dat alle letterlijke tekens (niet alleen ASCII-letters die momenteel worden gebruikt door opmaakcodes) ongewijzigd worden doorgegeven als het dus niet als opmaak bedoeld is.
Helaas wordt het enkele citaat van ASCII voorlopig nog steeds niet herkend als een eenvoudig alternatief voor het markeren van letterlijke tekst voor de momenteel ondersteunde dubbele ASCII-aanhalingstekens (dubbele aanhalingstekens zijn bijvoorbeeld verplicht voor andere toepassingen, zoals de afbakening van tekenreekswaarden in JSON, C, C ++...) en backslashes (die ook moeten worden ontsnapt in tekenreeksconstanten die door veel talen worden gebruikt, waaronder JSON, C, C++, PHP, JavaScript, Lua).
U kunt dus nog steeds geen letterlijk dubbel citaat insluiten zonder het te markeren met een backslash (of u kunt in plaats daarvan andere krullende, hoekige of vierkante aanhalingstekens gebruiken).
Het date/time object kan in elk formaat zijn dat door PHP's strtotime() functie wordt geaccepteerd.
Absolute (bijv. 20 December 2000), relatieve (bijv. +20 hours) en gecombineerde tijden (bijv. 30 July +1 year) worden geaccepteerd.
{{#time: r|now}} → Sun, 11 Jun 2023 00:07:31 +0000
{{#time: r|+2 hours}} → Sun, 11 Jun 2023 02:07:31 +0000
{{#time: r|2000-12-20}} → Wed, 20 Dec 2000 00:00:00 +0000
{{#time: r|2000 December 20}} → Error: Invalid time.
De language code in ISO 639-3 (?) maakt het mogelijk om de string in de gekozen taal weer te geven
{{#time:d F Y|1988-02-28|nl}} → 28 februari 1988
{{#time:l|now|uk}} → неділя
{{#time:d xg Y|20 June 2010|pl}} → 20 czerwca 2010
De parameter local geeft aan of het date/time object verwijst naar de lokale tijdzone of naar UTC.
Dit is een booleaanse parameter: de waarde ervan wordt bepaald door de waarde van het argument te casten (zie de officiële PHP-documentatie voor details over hoe tekenreeksen worden gegoten naar booleaanse waarden).
Houd er rekening mee dat als de variabele $wgLocaltimezone is ingesteld op UTC, er geen verschil is in de uitvoer wanneer local is ingesteld op true of false.
Zie de volgende voorbeelden voor meer informatie:
{{#time: Y F d H:i:s|now|it|0}} → 2023 giugno 11 00:07:31
{{#time: Y F d H:i:s|now|it|1}} → 2023 giugno 11 00:07:31
{{#time: Y F d H:i:s|+2 hours||0}} → 2023 juni 11 02:07:31
{{#time: Y F d H:i:s|+2 hours||1}} → 2023 juni 11 02:07:31
Het bereik van de invoer is 1 januari 0111 → 31 december 9999. Voor de jaren 100 tot en met 110 is de uitvoer inconsistent, Y en schrikkeljaren zijn als de jaren 100-110, r, D, l en men interpreteert deze jaren als 2000-2010.
{{#time: d F Y | 29 Feb 0100 }} → 01 maart 0100 (correct, geen schrikkeljaar), maar
{{#time: r | 29 Feb 0100 }} → Mon, 01 Mar 0100 00:00:00 +0000 (fout, ook al wordt 100 geïnterpreteerd als 2000, want dat is een schrikkeljaar)
{{#time: d F Y | 15 April 10000 }} → Error: Invalid time.
Jaarnummers 0-99 worden geïnterpreteerd als 2000-2069 en 1970-1999, behalve wanneer geschreven in 4-cijferige notatie met voorloopnullen:
{{#time: d F Y | 1 Jan 6 }} → 01 januari 2006
{{#time: d F Y | 1 Jan 06 }} → 01 januari 2006
{{#time: d F Y | 1 Jan 006 }} → 01 januari 2006
{{#time: d F Y | 1 Jan 0006 }} → 01 januari 0006 (4-digit format)
De weekdag wordt geleverd voor de jaren 100-110 en vanaf 1753, voor de jaren 111-1752 toont de r-uitgang "Onbekend" en de l-uitgang "". Als gevolg hiervan wordt de r-output niet geaccepteerd als invoer voor deze jaren.
Er kunnen volledige of gedeeltelijke absolute data worden opgegeven; De functie zal delen van de datum "invullen" die niet zijn opgegeven met behulp van de huidige waarden:
{{#time: Y | January 1 }} → 2023
Waarschuwing:
De invulfunctie is niet consistent; Sommige delen worden ingevuld met de huidige waarden, andere niet:
{{#time: Y m d H:i:s | June }} → 2023 06 11 00:00:00 Geeft het begin van de dag, maar de huidige dag van de maand en het huidige jaar.
{{#time: Y m d H:i:s | 2003 }} → 2003 06 11 00:00:00 Geeft het begin van de dag, maar de huidige dag van het jaar.
Er is een uitzondering van de gevulde dag:
{{#time: Y m d H:i:s | June 2003 }} → 2003 06 01 00:00:00 Geeft het begin van de dag en het begin van de maand.
Een viercijferig getal wordt altijd geïnterpreteerd als een jaar, nooit als uren en minuten: Vóór r86805 in 2011 was dit niet het geval.
{{#time: Y m d H:i:s | 1959 }} → 1959 06 11 00:00:00
Een getal van zes cijfers wordt geïnterpreteerd als uren, minuten en seconden indien mogelijk, maar verder als een fout (bijvoorbeeld niet als een jaar en maand):
{{#time: Y m d H:i:s | 195909 }} → 2023 06 11 19:59:09 Invoer wordt behandeld als een tijd in plaats van een code voor een jaar + maand.
{{#time: Y m d H:i:s | 196009 }} → Error: Invalid time. Hoewel 19:60:09 geen geldige tijd is, wordt 196009 niet geïnterpreteerd als september 1960.
De functie voert een bepaalde hoeveelheid datumwiskunde uit:
{{#time: d F Y | January 0 2008 }} → 31 december 2007
{{#time: d F | January 32 }} → Error: Invalid time.
{{#time: d F | February 29 2008 }} → 29 februari
{{#time: d F | February 29 2007 }} → 01 maart
{{#time:Y-F|now -1 months}} → 2023-mei
De totale lengte van de opmaakreeksen van de aanroepen van #time is beperkt tot 6000 tekens [1]
Tijdzone probleem
Er is een bug in deze #time parserfunctie (meer specifiek in PHP DateTime) die het doorgeven van niet-gehele getallen als relatieve tijdzone-verschuivingen niet toestaat. Dit probleem is niet van toepassing bij het gebruik van een tijdzone op het uur, zoals EDT. Bijvoorbeeld:
{{#time:g:i A | -4 hours }} → 8:07 PM
India bevindt zich echter op een tijdverschuiving van +5,5 uur ten opzichte van UTC en dus zal het gebruik van zijn tijdzone normaal gesproken niet de juiste berekening van een relatieve tijdzone-offset mogelijk maken. Dit is wat er gebeurt:
{{#time:g:i A | +5.5 hours }} → 12:07 AM
U kunt dit probleem omzeilen door de tijd als volgt om te zetten in minuten of seconden:
{{#time:g:i A | +330 minutes }} → 5:37 AM
{{#time:g:i A | +19800 seconds }} → 5:37 AM
(Tim Starling, de ontwikkelaar van deze functie, leverde de exacte syntaxis voor deze oplossing.)
#timel
Deze functie is identiek aan {{#time: ... }}, wanneer de parameter local is ingesteld op true, dus het gebruikt altijd de lokale tijd van de wiki (zoals ingesteld in $wgLocaltimezone).
Syntaxis van de functie:
{{#timel: format string }}
{{#timel: format string | date/time object }}
{{#timel: format string | date/time object | language code }}
Houd er rekening mee dat als de variabele $wgLocaltimezone is ingesteld op UTC, er geen verschil is in de uitvoer wanneer local is ingesteld op true of false.
Voorbeeld van het gebruik van de parserfuncties #time en #timel vanaf een server waarop de tijdzone geen UTC is
Houd er rekening mee dat voor zowel time als time1 hetzelfde aantal seconden retourneert sinds 1970-01-01 00:00:00 UTC op Wikipedia's met andere tijdzones dan UTC (voorheen bekend als GMT)
U Unix tijd. Seconden na 1 januari 1970 00:00:00 GMT.
Z Tijdzone offset in seconden.
{{#time: U}} → 1686442050
{{#timel: U}} → 1686442050
{{#time: Z}} → 0
{{#timel: Z}} → 0
#titleparts
Deze functie scheidt een paginatitel in segmenten op basis van schuine strepen en retourneert vervolgens enkele van die segmenten als uitvoer.
{{#titleparts: paginanaam | aantal te retourneren segmenten | eerste te retourneren segment }}
Als de parameter aantal te retourneren segmenten niet is opgegeven, wordt standaard "0" ingesteld, waarmee alle segmenten van het eerste segment dat moet worden geretourneerd (inbegrepen) worden geretourneerd. Als de parameter eerste te retourneren segment niet is opgegeven of "0" is, wordt standaard "1" gebruikt:
Voor beide waarden worden negatieve waarden geaccepteerd. Negatieve waarden voor de parameter aantal te retourneren segmenten 'stript' effectief segmenten van het einde van de tekenreeks. Negatieve waarden voor het eerste te retourneren segment vertaalt zich naar 'begin rechts te tellen':
{{#titleparts: Talk:Foo/bar/baz/quok | -1 }} → Talk:Foo/bar/baz Hiermee stript u één segment van het uiteinde van de tekenreeks. Zie ook {{BASEPAGENAME}}.
{{#titleparts: Talk:Foo/bar/baz/quok | -4 }} → Stript alle 4 segmenten van het einde van de string
{{#titleparts: Talk:Foo/bar/baz/quok | -5 }} → Stript 5 segmenten van het einde van de string (meer dan er zijn)
{{#titleparts: Talk:Foo/bar/baz/quok | | -1 }} → quok Retourneert het laatste segment. Zie ook {{SUBPAGENAME}}.
{{#titleparts: Talk:Foo/bar/baz/quok | -1 | 2 }} → bar/baz Stript één segment van het einde van de tekenreeks, retourneert vervolgens het tweede segment en verder
{{#titleparts: Talk:Foo/bar/baz/quok | -1 | -2 }} → baz Begin met kopiëren bij het voorlaatste element; strip één segment van het einde van de string
Voor de verwerking is de parameter pagename HTML-gedecodeerd: als deze enkele standaard HTML-tekenentiteiten bevat, worden deze geconverteerd naar gewone tekens (intern gecodeerd met UTF-8, d.w.z. dezelfde codering als in de MediaWiki-bronpagina met behulp van deze parserfunctie).
Bijvoorbeeld, elke vermelding van ", " of " in paginanaam wordt vervangen door ".
Er wordt geen andere conversie van HTML naar platte tekst uitgevoerd, dus HTML-tags worden intact gelaten bij deze eerste stap, zelfs als ze ongeldig zijn in paginatitels.
Van sommige magische trefwoorden of parserfuncties van MediaWiki (zoals {{PAGENAME}} en dergelijke) is bekend dat ze tekenreeksen retourneren die onnodig HTML-gecodeerd zijn, zelfs als hun eigen invoerparameter niet HTML-gecodeerd was:
De parserfunctie titleparts kan vervolgens worden gebruikt als tijdelijke oplossing om deze geretourneerde tekenreeksen te converteren, zodat ze correct kunnen worden verwerkt door sommige andere parserfuncties die ook een paginanaam in parameter nemen (zoals {{PAGESINCAT:}} maar die nog steeds niet goed werken met HTML-gecodeerde invoerreeksen.
Als de huidige pagina bijvoorbeeld de categorie Ivoorkust, is, dan:
{{#ifeq: {{FULLPAGENAME}} | Category:Côte-d'Or | 1 | 0 }} en {{#ifeq: {{FULLPAGENAME}} | Category:Côte-d'Or | 1 | 0 }} worden beide geretourneerd als beide 1; (de #ifeq parserfunctie voert de HTML-decodering van de invoerparameters uit).
{{#switch: {{FULLPAGENAME}} | Category:Côte-d'Or = 1 | #default = 0 }} en {{#switch: {{FULLPAGENAME}} | Category:Côte-d'Or = 1 | #default = 0 }} worden beide als 1 geretourneerd; (de #ifeq parserfunctie voert de HTML-decodering van de invoerparameters uit).
{{#ifexist: {{FULLPAGENAME}} | 1 | 0 }}, {{#ifexist: Category:Côte-d'Or | 1 | 0 }} zelfs {{#ifexist: Category:Côte-d'Or | 1 | 0 }} zullen allemaal 1 retourneren als die categoriepagina bestaat (de #ifexist parserfunctie voert de HTML-decodering van de invoerparameters uit);
{{PAGESINCAT: Côte-d'Or }} retourneert een niet-nulgetal, als die categorie pagina's of subcategorieën bevat, maar:
{{PAGESINCAT: {{CURRENTPAGENAME}} }}, kan nog steeds onvoorwaardelijk 0 retourneren, net als:
De reden van dit onverwachte gedrag is dat er bij de huidige versies van MediaWiki er twee kanttekeningen zijn:
{{FULLPAGENAME}}, of zelfs {{FULLPAGENAME:Côte-d'Or}}kan de daadwerkelijk HTML-gecodeerde tekenreeks retourneren Category:Côte-d'Or en niet de verwachte Category:Côte-d'Or, en dat:
{{PAGESINCAT: Côte-d'Or }} retourneert onvoorwaardelijk 0 (het magische trefwoord PAGESINCAT voert geen HTML-decodering van de invoerparameter uit).
De eenvoudige oplossing met behulp van titleparts (die zal blijven werken als de twee kanttekeningen worden opgelost in een latere versie van MediaWiki) is:
{{PAGESINCAT: {{#titleparts: {{PAGENAME:Category:Côte-d'Or}} }} }}, die allemaal het werkelijke aantal pagina's in dezelfde categorie retourneren.
Vervolgens wordt de gedecodeerde pagename zoveel mogelijk gecanoniseerd tot een standaard paginatitel die door MediaWiki wordt ondersteund:
Alle underscores worden automatisch vervangen door spaties:
{{#titleparts: Talk:Foo/bah_boo|1|2}} → bah boo Niet bah_boo, ondanks de underscore in het origineel.
De string wordt maximaal 25 keer gesplitst; Verdere schuine strepen worden genegeerd en het 25e element bevat de rest van de tekenreeks. De tekenreeks is ook beperkt tot 255 tekens, omdat deze wordt behandeld als een paginatitel:
Als u om welke reden dan ook deze functie tot het uiterste moest pushen, hoewel zeer onwaarschijnlijk, is het mogelijk om de limiet van 25 splitsingen te omzeilen door functie-aanroepen te nesten:
Ten slotte wordt de eerste subtekenreeks met een hoofdletter geschreven volgens de hoofdletterinstellingen van de lokale wiki (als die subtekenreeks ook begint met de naam van een lokale namespace, wordt die naam ook genormaliseerd).
{{#titleparts: talk:a/b/c }} → Talk:A/b/c
Waarschuwing:
U kunt #titleparts gebruiken als een kleine "string parser en converter", maar houd er rekening mee dat het de eerste subtekenreeks met een hoofdletter retourneert:
{{#titleparts: one/two/three/four|1|1 }} → One
{{#titleparts: one/two/three/four|1|2 }} → two
Als kleine letters nodig zijn, gebruik dan de functie lc: om de uitvoer te regelen:
{{lc: {{#titleparts: one/two/three/four|1|1 }} }} → one
U kunt een schuine streep aan het begin van de tekenreeks voorafgaan om de juiste eerste subtekenreekshoofdletter (hoofdletter of kleine letter) te krijgen. Gebruik 2 in plaats van 1 voor eerste segment om te retourneren:
{{#titleparts: /one/two/three/four|1|2 }} → one
{{#titleparts: /One/two/three/four|1|2 }} → One
Waarschuwing:
Bepaalde tekens die illegaal zijn in een paginatitel, zorgen ervoor dat #titleparts de tekenreeks niet goed verwerkt:
{{#titleparts: {one/two} | 1 | 1 }} → {one/two}. Levert niet het verwachte: {one
{{#titleparts: [[page]]/123 | 1 | 2 }} → page/123. Werkt niet omdat haakjes illegaal zijn in paginatitels en deze parserfunctie verwerkt geen koppelingen die zijn ingesloten in de invoerparameter paginanaam, zelfs niet wanneer ze de MediaWiki-syntaxis of andere HTML- of MediaWiki-tags gebruiken.
{{#titleparts: red/#00FF00/blue | 1 | 3 }} → "". Werkt niet omdat "#" ook illegaal is in paginatitels.
Waarschuwing:
Als een deel van de titel alleen "." of ".." is, zal #titleparts de tekenreeks niet parseren:
{{#titleparts: one/./three | 1 | 1 }} → one/./three. De hele string wordt geretourneerd. Het levert niet de verwachte: one
Waarschuwing:
Deze functie degradeert niet gracieus als de invoer groter is dan 255 bytes in UTF-8. Als de invoerreeks 256 bytes of meer is, wordt de hele tekenreeks geretourneerd.
Tekenreeksfuncties
Al deze functies (len, pos, rpos, sub, replace, explode) zijn geïntegreerd van de extensie StringFunctions, maar zijn alleen beschikbaar als een beheerder $wgPFEnableStringFunctions=true; instelt op LocalSettings.php.
Al deze functies werken in O(n) tijdscomplexiteit, waardoor ze veilig zijn tegen DoS aanvallen.
Sommige parameters van deze functies zijn beperkt door algemene instellingen om misbruik te voorkomen. Zie de sectie Limieten.
Voor functies die hoofdlettergevoelig zijn, kunt u in sommige gevallen het magische woord{{lc:string}} als tijdelijke oplossing gebruiken.
Om te bepalen of een MediaWiki-server deze functies inschakelt, controleert u de lijst met ondersteunde uitgebreide parserfuncties in Special:Version.
Tekenreekslengte wordt beperkt door variabele $wgPFStringLengthLimit, standaard tot 1000.
#len
De parserfunctie #len is samengevoegd van de extensie StringFunctions vanaf versie 1.2.0.
De functie #len retourneert de lengte van de gegeven tekenreeks.
De syntaxis:
{{#len:string}}
De retourwaarde is altijd een aantal tekens in de bron string (na uitbreidingen van sjabloonaanroepen, maar vóór conversie naar HTML).
Als er geen tekenreeks is opgegeven, is de retourwaarde nul.
Deze functie is veilig met UTF-8 multibyte tekens. Voorbeeld:
{{#len:Žmržlina}} → 8
Voorloop- en volgruimten of nieuwe lijnen worden niet meegeteld, maar tussenruimten en nieuwe lijnen worden in aanmerking genomen. Voorbeelden:
{{#len:Icecream }} → 8
{{#len: a b }} → 5 - 3 spaties tussen 2 tekens
Tekens die met referentie worden gegeven, worden niet geconverteerd, maar geteld volgens hun bronvorm.
{{#len: }} → 6 - Referenties naar benoemde tekens
{{#len: }} → 5 - Numerieke tekens referenties, niet genegeerd ondanks dat het hier een spatie aanduidt.
Tags zoals <nowiki> en andere tagextensies hebben altijd een lengte van nul, omdat hun inhoud verborgen is voor de parser. Voorbeeld:
{{#len:<nowiki>This is a </nowiki>test}} → 4
#pos
De parserfunctie #pos is samengevoegd van de extensie StringFunctions vanaf versie 1.2.0.
De functie #pos retourneert de positie van een bepaalde zoekterm binnen de tekenreeks.
De syntaxis:
{{#pos:string|zoekterm|offset}}
De parameter offset, indien opgegeven, geeft de beginpositie aan waar deze functie moet beginnen met zoeken.
Als de zoekterm wordt gevonden, is de retourwaarde een op nul gebaseerd geheel getal van de eerste positie binnen de string.
Als de zoekterm niet wordt gevonden, retourneert de functie een lege tekenreeks.
Deze functie is hoofdlettergevoelig.
De maximaal toegestane lengte van de zoekterm is beperkt via de globale instelling van $wgStringFunctionsLimitSearch.
Deze functie is veilig met UTF-8 multibyte tekens. Voorbeeld: {{#pos:Žmržlina|žlina}} retourneert 3.
Net als bij #len, worden <nowiki> en andere tagextensies behandeld als het hebben van een lengte van 1 voor de doeleinden van de tekenpositie.
Voorbeeld: {{#pos:<nowiki>This is a </nowiki>test|test}} retourneert 1.
#rpos
De parserfunctie #rpos is samengevoegd van de extensie StringFunctions vanaf versie 1.2.0.
De functie #rpos retourneert de laatste positie van een bepaalde zoekterm binnen de tekenreeks.
De syntaxis:
{{#rpos:string|zoekterm}}
Als de zoekterm wordt gevonden, is de retourwaarde een op nul gebaseerd geheel getal van de laatste positie binnen de string.
Als de zoekterm niet wordt gevonden, retourneert de functie -1.
Wanneer u dit gebruikt om naar het laatste scheidingsteken te zoeken, voegt u +1 toe aan het resultaat om de positie na het laatste scheidingsteken te bepalen. Dit werkt ook wanneer het scheidingsteken niet wordt gevonden, omdat "-1 + 1" nul is, wat het begin is van de gegeven waarde.
Deze functie is veilig met UTF-8 multibyte tekens. Voorbeeld: {{#rpos:Žmržlina|lina}} retourneert 4.
Net als bij #len, worden <nowiki> en andere tagextensies behandeld als het hebben van een lengte van 1 voor de doeleinden van de tekenpositie.
Voorbeeld: {{#rpos:<nowiki>This is a </nowiki>test|test}} retourneert 1.
#sub
De parserfunctie #sub is samengevoegd van de extensie StringFunctions vanaf versie 1.2.0.
De functie #sub retourneert een substring van de gegeven tekenreeks.
De syntaxis:
{{#sub:string|start|length}}
De parameter start, indien positief (of nul), geeft een op nul gebaseerde index op van het eerste teken dat moet worden geretourneerd.
Voorbeeld:
{{#sub:Icecream|3}} retourneert cream.
{{#sub:Icecream|0|3}} retourneert Ice.
Als de parameter start negatief is, geeft deze aan hoeveel tekens van het einde moeten worden geretourneerd.
Voorbeeld:
{{#sub:Icecream|-3}} retourneert eam.
De parameter length, indien aanwezig en positief, geeft de maximale lengte van de geretourneerde tekenreeks aan.
Voorbeeld:
{{#sub:Icecream|3|3}} retourneert cre.
Als de parameter length negatief is, geeft deze aan hoeveel tekens worden weggelaten aan het einde van de tekenreeks.
Voorbeeld:
{{#sub:Icecream|3|-3}} retourneert cr.
Als de parameter start negatief is, geeft deze aan hoeveel tekens van het einde moeten worden geretourneerd.
De parameter length, indien aanwezig en positief, geeft de maximale lengte van de geretourneerde tekenreeks van het startpunt aan.
Voorbeeld:
{{#sub:Icecream|-3|2}} retourneert ea.
Als de parameter length nul is, is er geen sprake van afkappen.
Als start een positie voorbij de afkapping vanaf het einde aangeeft met een negatieve parameter length, wordt een lege tekenreeks geretourneerd.
Voorbeeld: {{#sub:Icecream|3|-6}} retourneert een lege string.
Deze functie is veilig met UTF-8 multibyte tekens. Voorbeeld: {{#sub:Žmržlina|3}} retourneert žlina.
Net als bij #len, worden <nowiki> en andere tagextensies behandeld als het hebben van een lengte van 1 voor de doeleinden van de tekenpositie. Voorbeeld: {{#sub:<nowiki>This is a </nowiki>test|1}} retourneert test.
#count
De parserfunctie #count is samengevoegd met de extensie StringFunctions vanaf versie 1.2.0.
De functie #count retourneert het aantal keren dat een bepaalde subtekenreeks in de opgegeven tekst voorkomt.
{{#count:string|substring}}
#replace
De parserfunctie #replace is samengevoegd van de extensie StringFunctions vanaf versie 1.2.0.
De #replace-functie retourneert de gegeven tekenreeks waarbij alle gevallen van een zoekterm worden vervangen door een vervangende term.
{{#replace:string|search term|replacement term}}
Als de search term niet gespecificeerd of leeg is, wordt er naar een enkele spatie gezocht.
Als de replacement term niet gespecificeerd of leeg is, worden alle voorkomens van search term uit de string verwijderd.
Deze functie is hoofdlettergevoelig.
De maximaal toegestane lengte van de search term is beperkt via de globale instelling van $wgStringFunctionsLimitSearch.
The maximum allowed length of the replacement term is limited through the $wgStringFunctionsLimitReplace global setting.
Even if the replacement term is a space, an empty string is used.
This is a side-effect of the MediaWiki parser.To use a space as the replacement term, put it in nowiki tags.
Voorbeeld: {{#replace:My_little_home_page|_|<nowiki> </nowiki>}} retourneert My little home page.
If this doesn't work, try {{#replace:My_little_home_page|_|<nowiki/> <nowiki/>}} with two self-closing tags.
Note that this is the only acceptable use of nowiki in the replacement term, as otherwise nowiki could be used to bypass $wgStringFunctionsLimitReplace, injecting an arbitrarily large number of characters into the output.
For this reason, all occurrences of <nowiki> or any other tag extension within the replacement term are replaced with spaces.
This function is safe with UTF-8 multibyte characters.
If multiple items in a single text string need to be replaced, one could also consider Extension:ReplaceSet.
It adds a parser function for a sequence of replacements.
Case-insensitive replace
Currently the syntax doesn't provide a switch to toggle case-sensitivity setting.But you may make use of magic words of formatting as a workaround.(e.g. {{lc:your_string_here}})For example, if you want to remove the word "Category:" from the string regardless of its case, you may type:
{{#replace:{{lc:{{{1}}}}}|category:|}}
But the disadvantage is that the output will become all lower-case.If you want to keep the casing after replacement, you have to use multiple nesting levels (i.e. multiple replace calls) to achieve the same thing.
#explode
The #explode parser function was merged from the StringFunctions extension as of version 1.2.0.
The #explode function splits the given string into pieces and then returns one of the pieces.
De syntaxis:
{{#explode:string|delimiter|position|limit}}
The delimiter parameter specifies a string to be used to divide the string into pieces.This delimiter string is then not part of any piece, and when two delimiter strings are next to each other, they create an empty piece between them.If this parameter is not specified, a single space is used.The limit parameter is available in ParserFunctions only, not the standalone StringFunctions version, and allows you to limit the number of parts returned, with all remaining text included in the final part.
The position parameter specifies which piece is to be returned.Pieces are counted from 0.If this parameter is not specified, the first piece is used (piece with number 0).When a negative value is used as position, the pieces are counted from the end.In this case, piece number -1 means the last piece.
Voorbeelden:
{{#explode:And if you tolerate this| |2}} retourneert you
These are used to limit some parameters of some functions to ensure the functions operate in O(n) time complexity, and are therefore safe against DoS attacks.
$wgStringFunctionsLimitSearch
This setting is used by #pos, #rpos, #replace, and #explode. All these functions search for a substring in a larger string while they operate, which can run in O(n*m) and therefore make the software more vulnerable to DoS attacks. By setting this value to a specific small number, the time complexity is decreased to O(n).
This setting limits the maximum allowed length of the string being searched for.
The default value is 30 multibyte characters.
$wgStringFunctionsLimitReplace
This setting is used by #replace. This function replaces all occurrences of one string for another, which can be used to quickly generate very large amounts of data, and therefore makes the software more vulnerable to DoS attacks. This setting limits the maximum allowed length of the replacing string.
The default value is 30 multibyte characters.
Algemene punten
Vervanging
Parser functions can be substituted by prefixing the hash character with subst::
{{subst:#ifexist: Help:Extension:ParserFunctions/nl | [[Help:Extension:ParserFunctions/nl]] | Help:Extension:ParserFunctions/nl }} → the code [[Help:Extension:ParserFunctions/nl]] will be inserted in the wikitext since the page Help:Extension:ParserFunctions/nl exists.
Waarschuwing:
The results of substituted parser functions are undefined if the expressions contain unsubstituted volatile code such as variables or other parser functions. For consistent results, all the volatile code in the expression to be evaluated must be substituted. See Help:Substitution.
Substitution does not work within <ref>…</ref>; you can use {{subst:#tag:ref|…}} for this purpose.
Doorverwijzingen
Especially {{#time:…|now-…}} could be handy in redirects to pages including dates, but this does not work.
pipe-tekens gebruiken in tabellen
Parser functions will mangle wikitable syntax and pipe characters (|), treating all the raw pipe characters as parameter dividers.To avoid this, most wikis used a template Template:! with its contents only a raw pipe character (|), since MW 1.24 a {{!}} magic word replaced this kludge.This 'hides' the pipe from the MediaWiki parser, ensuring that it is not considered until after all the templates and variables on a page have been expanded.It will then be interpreted as a table row or column separator.Alternatively, raw HTML table syntax can be used, although this is less intuitive and more error-prone.
You can also escape the pipe character for display as a plain, uninterpreted character using an HTML entity: | .
Beschrijving
U typt
U krijgt
Escaping pipe character as table row/column separator
{{!}}
|
Escaping pipe character as a plain character
|
|
Witruimte verwijderen
Whitespace, including newlines, tabs, and spaces, is stripped from the beginning and end of all the parameters of these parser functions. If this is not desirable, comparison of strings can be done after putting them in quotation marks.
{{#ifeq: foo | foo | equal | not equal }} → equal
{{#ifeq: "foo " | " foo" | equal | not equal }} → not equal
To prevent the trimming of then and else parts, see m:Template:If. Some people achieve this by using <nowiki> </nowiki> instead of spaces.
foo{{#if:|| bar }}foo → foobarfoo
foo{{#if:||<nowiki/>bar<nowiki/>}}foo → foo bar foo
However, this method can be used to render a single whitespace character only, since the parser squeezes multiple whitespace characters in a row into one.
<spanstyle="white-space: pre;">foo{{#if:||<nowiki/> bar <nowiki/>}}foo</span>
→
foo bar foo
In this example, the white-space: pre style is used to force the whitespace to be preserved by the browser, but even with it the spaces are not shown. This happens because the spaces are stripped by the software, before being sent to the browser.
Het is mogelijk om dit gedrag te omzeilen door witruimtes te vervangen door   (breakable space) or (non-breakable space), omdat ze niet door de software worden gewijzigd:
<spanstyle="white-space: pre;">foo{{#if:||   bar   }}foo</span> → foo bar foo
foo{{#if:|| bar }}foo → foo bar foo
Beware that not all parameters are created equal.
In ParserFunctions, whitespace at the beginning and end is always stripped.
In templates, whitespace at the beginning and end is stripped for named parameters and named unnamed parameters but not from unnamed parameters: