Help:Extension:ParserFunctions/ja
![]() |
注意: このページを編集すると、編集内容が CC0 のもとで公開されることに同意したと見なされます。詳細はパブリック・ドメインのヘルプ ページを参照してください。 | ![]() |
ParserFunctions (パーサ関数)拡張機能は MediaWiki に既存の「マジックワード 」を補完するパーサ関数を提供します。 (文字列処理のために追加のパーサー関数を提供するように設定できるかもしれません。ここでいう文字列関数の説明文書はこちら を参照してください。) この拡張機能が提供するすべてのパーサー関数は以下の形式です:
{{#関数名: 引数 1 | 引数 2 | 引数 3 ... }}
#expr
種類 | 演算子 |
---|---|
グループ化 (括弧) | ( ) |
数値 | 1234.5 e (2.718) pi (3.142) |
二項演算子 e 単項 + ,- | |
単項 | not ceil trunc floor abs exp ln sin cos tan acos asin atan sqrt |
二項 | ^ |
* / div mod fmod | |
+ - | |
四捨五入 | round |
論理 | = != <> > < >= <= |
and | |
or |
この関数は、数式を計算してその計算結果を返します。
この関数はmw.ext.ParserFunctions.expr
関数を介して Scribunto でも使えます。
{{#expr: 数式 }}
基本の例
{{#expr: 1 + 1 }}
→ 2
表の右欄は使用できる演算子で、上ほど優先順位が高いものです。各演算子の機能の詳細は計算のヘルプ Manual:Expr parser function syntax を参照してください。 出力結果の精度と形式には幅があり、ウィキを実行するサーバーのOSバージョン、サイト表示言語の数値形式の影響を受けます。
ブール代数を使用して評価する際、値がゼロなら false
、非ゼロなら正の数でも負の数でも 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
空の入力式は空の文字列を返します。無効な式はいくつかのエラー メッセージのうちのいずれかを返します。このエラーは #iferror
関数を使用して捕捉できます:
{{#expr: }}
→{{#expr: 1+ }}
→ Expression error: Missing operand for +.{{#expr: 1 = }}
→ Expression error: Missing operand for =.{{#expr: 1 foo 2 }}
→ Expression error: Unrecognized word "foo".
数値の前後の加算および減算オペランドの順序は意味があり、誤った入力を持つオペランドとしてではなく、正または負の値として扱われる場合があります。
{{#expr: +1 }}
→ 1{{#expr: -1 }}
→ -1{{#expr: + 1 }}
→ 1{{#expr: - 1 }}
→ -1
メモ: マジックワードの出力を使用する場合は、コンマを削除して数字を翻訳するために、それらをraw形式にする必要があることに注意してください。
たとえば、{{NUMBEROFUSERS}} は 18,104,539 になりますが、18104539 が必要です。これは {{formatnum:{{NUMBEROFUSERS}}|R}}
を使用して取得できます。
これは、数字が翻訳される一部の言語では特に重要です。
たとえば、ベンガル語では、{{NUMBEROFUSERS}} は ৩০,০৬১ を生成します。
{{#expr:{{NUMBEROFUSERS}}+100}}
→ Expression error: Unrecognized punctuation character ",".{{#expr:{{formatnum:{{NUMBEROFUSERS}}|R}}+100}}
→ 18104639
四捨五入機能
左側の数字を四捨五入して 1/10 の倍数に切り上げ、べき指数は右側に与えられた数の小数点2ケタ目以下を切り上げた値に等しくなります。
切り上げや切り捨てを行うには、それぞれ単項のceil
とfloor
を使用してください。
テスト ケース | 結果 | 四捨五入の手法 |
---|---|---|
{{#expr: 1/3 round 5 }} | 0.33333 | 最終桁が 5 未満であるため、切り上げはされません (0.333333… → 0.33333) |
{{#expr: 1/6 round 5 }} | 0.16667 | 最終桁が 5 以上であるため、切り上げされます (0.166666… → 0.16667) |
{{#expr: 8.99999/9 round 5 }} | 1 | この場合も、結果は最後の桁で切り上げられ、追加の切り上げが行われます。 (0.999998… → 1.00000 → 1) |
{{#expr: 1234.5678 round -2 }} | 1200 | 負の値は小数点の左側に丸められるため、100に最も近い値に丸められます。 |
{{#expr: 1234.5678 round 2 }} | 1234.57 | 正の値は小数点の右側に丸められるため、最も近い100番目に丸められます |
{{#expr: 1234.5678 round 2.3 }} | 1234.57 | round の右の値の小数点以下は、丸めの結果には影響しません |
{{#expr: trunc 1234.5678 }} | 1234 | 小数点以下の切り捨て |
最も近い整数への丸め | ||
{{#expr: 1/3 round 0 }} | 0 | 最も近い整数への切り捨てで 0 |
{{#expr: 1/2 round 0 }} | 1 | 最も近い整数への切り上げで 1 |
{{#expr: 3/4 round 0 }} | 1 | 最も近い整数への切り上げで 1 |
{{#expr: -1/3 round 0 }} | -0 | 最も近い整数への切り上げで 0 |
{{#expr: -1/2 round 0 }} | -1 | 最も近い整数への切り捨てで -1 |
{{#expr: -3/4 round 0 }} | -1 | 最も近い整数への切り捨てで -1 |
ceill や floor による切り上げや切り捨て | ||
{{#expr: ceil(1/3) }} | 1 | 次に大きい整数まで |
{{#expr: floor(1/3) }} | 0 | 次の「小さい」整数、つまりゼロまで |
{{#expr: ceil(-1/3) }} | -0 | 最も近い整数への切り上げで 0 |
{{#expr: floor(-1/3) }} | -1 | 負の整数である次の小さい整数まで |
{{#expr: ceil 1/3 }} | 0.33333333333333 | 1が既に整数であるため、丸めは行なわれません |
Rounding large numbers | ||
{{#expr: 1e-92 round 400 }} | 1.0E-92 | 非常に桁の大きな数字を丸めようとすると、無限大に近づきます。 したがって、無限大を備えない元の値を答えとして返します。 |
{{#expr: 1e108 round 200 }} | 1.0E+108 | 上記と同じ。 |
文字列
式は数値のような値でのみ機能し、文字列や文字を比較することはできません。代わりに#ifeqを使用できます。
{{#expr: "a" = "a" }}
→ Expression error: Unrecognized punctuation character """.{{#expr: a = a }}
→ Expression error: Unrecognized word "a".{{#ifeq: a | a | 1 | 0 }}
→ 1
#if
この関数はテスト文字列を評価し、それが空であるかどうかを判定します。空白のみを含むテスト文字列は空であると見做されます。
{{#if: テスト文字列 | テスト文字列が空ではない場合の値 | テスト文字列が空 (または空白のみ) の場合の値}}
{{#if: パラメーター 1 | パラメーター 2 | パラメーター 3 }}
この関数は、初めに最初の引数が空でないか確かめます。最初の引数が空でない場合、2 番目の引数を表示します。最初の引数が空または空白文字(空白、改行等)のみを含む場合、3 番目の引数を表示します。
{{#if: | yes | no}}
→ no{{#if: string | yes | no}}
→ yes{{#if: | yes | no}}
→ no{{#if: | yes | no}}
→ no
テスト文字列は常に純粋なテキストとして評価されます。そのため数式は評価されません (#ifexpr を参照):
{{#if: 1==2 | yes | no }}
→ yes{{#if: 0 | yes | no }}
→ yes
最後の引数 (false) は省略可能です:
{{#if: foo | yes }}
→ yes{{#if: | yes }}
→{{#if: foo | | no}}
→
関数はネストできます。これを行うには、囲んでいる #if
関数のパラメーターの代わりに、内部の #if
関数を完全な形式でネストします。ウィキやメモリ制限によって異なりますが、最大7レベルのネストが可能です。
{{#if:テスト文字列
|テスト文字列が空ではない場合の値
|{{#if:テスト文字列
|テスト文字列が空ではない場合の値
|テスト文字列が空 (または空白のみ) の場合の値
}}
}}
#if
文において引数をテスト文字列として用いることも可能です。変数名の後には |
(パイプ記号)を追加する必要があります。
(そのため、パラメーターに値がない場合は、文字列 "{{{1}}}
"ではなく空の文字列に評価されます。)
{{#if:|変数1にテキストを入力しました|変数1にテキストがありません}}
このパーサー関数の他の例については Help:テンプレート内でのパーサー関数 を参照してください。
#ifeq
このパーサー関数は、2つの入力文字列を比較し、それらが同一であるかどうかを判断し、結果に基づいて2つの文字列のうちの1つを返します。
さらに比較と出力文字列が必要な場合は、#switch
の使用を検討してください。
{{#ifeq: string 1 | string 2 | value if identical | value if different }}
両方の文字列が有効な数値である場合、文字列は数値的に比較されます。
{{#ifeq: 01 | 1 | equal | not equal}}
→ equal{{#ifeq: 0 | -0 | equal | not equal}}
→ equal{{#ifeq: 1e3 | 1000 | equal | not equal}}
→ equal{{#ifeq: {{#expr:10^3}} | 1000 | equal | not equal}}
→ equal
それ以外は文字列として比較します。その場合は大文字小文字を識別します。
{{#ifeq: foo | bar | equal | not equal}}
→ not equal{{#ifeq: foo | Foo | equal | not equal}}
→ not equal{{#ifeq: "01" | "1" | equal | not equal}}
→ not equal (引用符なしで、上記の同様の例と比較してください){{#ifeq: 10^3 | 1000 | equal | not equal}}
→ not equal (前述した同様の例と対比してみるには、#expr
は有効な特定の数値を先に返します)
実用的な例として、既存のテンプレート Template:Timer
をパーサーを使用して、短い時間と長い時間の2つの標準時間から選択するとします。
文字列「short」と比較する最初の入力としてパラメータを取ります–順序の規則はありませんが、パラメーターが最初にある方が読みやすくなります。
テンプレートコードは次のように定義されています:
{{#ifeq: {{{1|}}} | short | 20 | 40 }}
次のようになります:
{{timer|short}}
→ 20{{timer|20}}
→ 40{{timer}}
→ 40
#iferror
この関数は入力文字列を取り、2つの結果から1つを返します。この関数は、 #expr
や #time
や #rel2abs
のような他のパーサー関数、ループや再帰のようなテンプレートエラー、その他の「フェースソフト」なパーサーエラーによって作られた class="error"
を含む HTML オブジェクトが入力文字列に含まれていた場合に true
と評価します。
{{#iferror: test string | value if error | value if correct }}
返値の文字列の一方または両方が省略できます。もし correct
の文字列が省略されていた場合、エラーがないのであれば test string
が返されます。 error
の文字列も省略されていた場合は、エラー時にから文字列が返されます。
{{#iferror: {{#expr: 1 + 2 }} | error | correct }}
→ correct{{#iferror: {{#expr: 1 + X }} | error | correct }}
→ error{{#iferror: {{#expr: 1 + 2 }} | error }}
→ 3{{#iferror: {{#expr: 1 + X }} | error }}
→ error{{#iferror: {{#expr: 1 + 2 }} }}
→ 3{{#iferror: {{#expr: 1 + X }} }}
→ {{#iferror: {{#expr: . }} | error | correct }}
→ correct{{#iferror: <strong class="error">a</strong> | error | correct }}
→ error
エラーによっては追跡カテゴリを生じさせ、{{#iferror:}}
を当てても同カテゴリの追加を回避できません。
#ifexpr
この関数は数式を評価し、結果の真偽値に応じて2つの文字列のいずれかを返します:
{{#ifexpr: expression | value if true | value if false }}
expression
入力は、上記の#expr
とまったく同じように評価され、同じ演算子を使用できます。次に、出力は真偽値の式として評価されます。
空の入力式はfalse
と評価されます:
{{#ifexpr: | yes | no}}
→ no
上記のように、ゼロはfalse
と評価され、ゼロ以外の値はtrue
と評価されるため、この関数は#ifeq
と#expr
のみを使用する関数と同等です:
{{#ifeq: {{#expr: expression }} | 0 | value if false | value if true }}
空の入力式または間違った入力式を除きます(エラーメッセージは空の文字列として扱われます。ゼロに等しくないため、value if true
を取得します)。
{{#ifexpr: = | yes | no }}
→ Expression error: Unexpected = operator.
比較
{{#ifeq: {{#expr: = }} | 0 | no | yes }}
→ yes
戻り値のいずれかまたは両方を省略できます。適切なブランチが空のままの場合、出力は提供されません。
{{#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 }}
→
等号または不等号のブール演算子に対応します。
{{#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
#ifexist
この関数は入力文字列を受け取り、それをページ名として解釈し、そのページがローカルウィキに存在するかどうかに応じて、2つの値のいずれかを返します。
{{#ifexist: page title | value if exists | value if doesn't exist }}
ページが存在する場合、コンテンツが含まれているかどうかにかかわらず、関数はtrue
(真)と評価されます(カテゴリリンクやマジックワード などのメタデータが含まれていますが、表示されていません)。 コンテンツ、空白、またはリダイレクト です。存在していないページのみがfalse
(偽)と評価されます。これには、ページが以前は存在していたが削除された場合も含まれます。
{{#ifexist: Help:Extension:ParserFunctions/ja | exists | doesn't exist }}
→ exists{{#ifexist: XXHelp:Extension:ParserFunctions/jaXX | exists | doesn't exist }}
→ doesn't exist
この関数は、カスタマイズされたシステムメッセージ と、ソフトウェアによって定義された特別ページ に対してtrue
(真)と評価されます。
{{#ifexist: Special:Watchlist | exists | doesn't exist }}
→ exists{{#ifexist: Special:CheckUser | exists | doesn't exist }}
→ exists (Checkuser拡張機能がこのウィキにインストールされているため){{#ifexist: MediaWiki:Copyright | exists | doesn't exist }}
→ doesn't exist (MediaWiki:Copyrightがカスタマイズされていないため)
ページが#ifexist:
を使用してターゲットをチェックする場合、そのページはターゲットページのSpecial:WhatLinksHereリストに表示されます。したがって、コード{{#ifexist:Foo }}
がこのページ(Help:Extension:ParserFunctions/ja)にライブで含まれている場合、Special:WhatLinksHere/FooはHelp:Extension:ParserFunctions/jaをリストします。
共有メディアリポジトリを使用するWikiでは、#ifexist:
を使用して、ファイルがリポジトリにアップロードされているかどうかを確認できますが、Wiki自体にはアップロードされていません。
{{#ifexist: File:Example.png | exists | doesn't exist }}
→ doesn't exist{{#ifexist: Image:Example.png | exists | doesn't exist }}
→ doesn't exist{{#ifexist: Media:Example.png | exists | doesn't exist }}
→ exists
ファイルのローカル説明ページが作成されている場合、結果は上記のすべてに対して existsになります。
#ifexist:
はインターウィキリンクでは機能しません。
ifexistの制限
#ifexist:
は、「高負荷なパーサー関数」と見なされます。 1つのページに含めることができるのは限られた数だけです(参照読み込みされたテンプレート内の関数を含む)。
この制限を超えると、参照読み込み先ページが存在するかどうかに関係なく、それ以降の #ifexist:
関数は自動的にfalseを返し、ページは Category:Pages with too many expensive parser function calls に分類されます。
tracking category の名前は、ウィキのコンテンツ言語によって異なる場合があります。
使用事例によっては、a.new
(存在しないページへのリンクを選択) または a:not(.new)
(存在するページへのリンクを選択) を使用して ifexist 効果を css で代用できます。
さらに、単一ページで使用するメモリ消耗の激しいパーサ関数の件数の上限は $wgExpensiveParserFunctionLimit
で制御され、必要な場合は上限値を LocalSettings.php で変更できます。
存在し、必要なページ
存在せず、#ifexistを使っているかどうかテスト済みのページは、募集ページに分類されます。 根拠は T14019 に記述があり、 回避策の詳細は Template:Linkless を参照してください。(訳注:リンク元は削除済み)
#rel2abs
この関数は相対ファイル パスを絶対ファイル パスに変換します。
{{#rel2abs: path }}
{{#rel2abs: path | base path }}
path
部分では、以下の構文を使用できます:
.
→ 現在の階層..
→ 1 つ上の階層に移動/foo
→ 下位ディレクトリ /foo に 1 階層移動
base path
を指定していない場合は、ページの完全なページ名が代わりに使用されます:
{{#rel2abs: /quok | Help:Foo/bar/baz }}
→ Help:Foo/bar/baz/quok{{#rel2abs: ./quok | Help:Foo/bar/baz }}
→ Help:Foo/bar/baz/quok{{#rel2abs: ../quok | Help:Foo/bar/baz }}
→ Help:Foo/bar/quok{{#rel2abs: ../. | Help:Foo/bar/baz }}
→ Help:Foo/bar
/.
や /./
のような無効な構文は無視されます。
連続する終止符は2つまでしか許可されていないため、次のようなシーケンスを使用して、連続するステートメントを区切ることができます。
{{#rel2abs: ../quok/. | Help:Foo/bar/baz }}
→ Help:Foo/bar/quok{{#rel2abs: ../../quok | Help:Foo/bar/baz }}
→ Help:Foo/quok{{#rel2abs: ../../../quok | Help:Foo/bar/baz }}
→ quok{{#rel2abs: ../../../../quok | Help:Foo/bar/baz }}
→ エラー: パス「Help:Foo/bar/baz/../../../../quok」の階層が無効です (ルート階層からのアクセスをお試しください)。
同様の関数のグループについては、ヘルプ:マジックワード#URL データ も参照してください。 組み込みパーサー関数には 'localurl:', 'fullurl:', 'anchorencode:' などがあります。
#switch
関連項目: w:Help:Switch parser function
この関数は入力値1件を複数のテストケースと比較し、ヒットした場合は当該の文字列を返します。
{{#parsoid\0fragment:6}} ''comparison string'' | ''case'' = ''result'' | ''case'' = ''result'' | ''...'' | ''case'' = ''result'' | ''default result'' {{#parsoid\0fragment:7}}
例:
{{#switch: baz | foo = Foo | baz = Baz | Bar }}
→ Baz{{#switch: foo | foo = Foo | baz = Baz | Bar }}
→ Foo{{#switch: zzz | foo = Foo | baz = Baz | Bar }}
→ Bar
部分的なトランスクルージョン タグを含む #switch は、テンプレート コーディングに慣れていない編集者が構成可能な要素を表示および編集できるようにする構成ファイルに影響を与える可能性があります。
既定
case
文字列に対応するcomparison string
がヒットしない場合、default result
を返します。
{{#switch: test | foo = Foo | baz = Baz | Bar }}
→ Bar
この構文では、既定の結果は最後のパラメーターである必要があり、生の等号({{}}
のない等号)を含めることはできません。
一致する場合は、ケース比較として扱われ、一致するケースがない場合はテキストは表示されません。
これは、既定値が定義されていない (空である) ためです。
ただし、大文字と小文字が一致する場合は、関連する文字列が返されます。
{{#switch: test | Bar | foo = Foo | baz = Baz }}
→{{#switch: test | foo = Foo | baz = Baz | B=ar }}
→{{#switch: test | test = Foo | baz = Baz | B=ar }}
→ Foo
代替方法として、既定の結果を "#default
" のcase
文字列で明示的に宣言することもできます。
{{#parsoid\0fragment:8}} ''comparison string'' | ''case'' = ''result'' | ''case'' = ''result'' | ''...'' | ''case'' = ''result'' | #default = ''default result'' {{#parsoid\0fragment:9}}
この方法で宣言された既定の結果は、関数内のどこにでも配置できます。
{{#switch: test | foo = Foo | #default = Bar | baz = Baz }}
→ Bar
default
パラメータが省略され、一致が行われない場合、result
(結果)は返されません。
{{#switch: test | foo = Foo | baz = Baz }}
→
グループ化の結果
いくつかの case
文字列に同じ result
文字列を返す「フォールスルー」値を持たせることができます。これにより重複を最小限に抑えることができます。
{{#parsoid\0fragment:10}} ''comparison string'' | ''case1'' = ''result1'' | ''case2'' | ''case3'' | ''case4'' = ''result234'' | ''case5'' = ''result5'' | ''case6'' | ''case7'' = ''result67'' | #default = ''default result'' {{#parsoid\0fragment:11}}
ここではケース2と3、4とも出力はresult234
です。ケース6と7の出力は両方ともresult67
です
上記の場合、最後のパラメータの「#default =
」は省略できます。
パラメータとともに使用
この関数は、テスト文字列としてパラメータとともに使用できます。
この場合、大文字と小文字を文字列 「{{{parameter name}}}
」に設定する可能性は非常に低いため、パラメータ名の後にパイプを配置する必要はありません。
(これは、パイプが存在せず、パラメーターが存在しないか、値がある場合にパラメーターが既定で設定する値です。
Help:テンプレート内でのパーサー関数 を参照してください。)
{{#switch: {{{1}}} | foo = Foo | baz = Baz | Bar }}
上記の場合、{{{1}}}
がfoo
に等しい場合、関数はFoo
を返します。
baz
に等しい場合、関数はBaz
を返します。
パラメータが空であるか存在しない場合、関数はBar
を返します。
上記のセクションのように、ケースを組み合わせて単一の結果を得ることができます。
{{#switch: {{{1}}} | foo | zoo | roo = Foo | baz = Baz | Bar }}
ここで、{{{1}}}
がfoo
、zoo
、またはroo
に等しい場合、関数はFoo
を返します。
baz
に等しい場合、関数はBaz
を返します。
パラメータが空であるか存在しない場合、関数はBar
を返します。
さらに、テストパラメータ値がいずれの場合にも一致しない場合に何も返したくない場合は、既定の結果を省略できます。
{{#switch: {{{1}}} | foo = Foo | bar = Bar }}
この場合、{{{1}}}
が存在してfoo
またはbar
に等しい場合を除き、関数は空の文字列を返します。この場合、関数はそれぞれFoo
またはBar
を返します。
これは、既定の結果を空として宣言するのと同じ効果があります。
{{#switch: {{{1}}} | foo | zoo | roo = Foo | baz = Baz | }}
何らかの理由でケースを「{{{parameter name}}}
」に設定すると、パラメーターが存在しないか値がない場合に、関数はそのケースの結果を返します。
関数の既定の結果を返すには、パラメーターが存在し、文字列「{{{parameter name}}}
」以外の値を持っている必要があります。
- (
{{{1}}}
が存在しないか、空の場合):{{#switch: {{{1}}} | {{{1}}} = Foo | baz = Baz | Bar }}
→ Foo
- (
{{{1}}}
の値が「test
」の場合):{{#switch: {{{1}}} | {{{1}}} = Foo | baz = Baz | Bar }}
→ Bar
- (
{{{1}}}
の値が「{{{1}}}
」の場合):{{#switch: {{{1}}} | {{{1}}} = Foo | baz = Baz | Bar }}
→ Foo
この架空のケースでは、パイプをパラメーター({{{1|}}}
)に追加する必要があります。
比較の挙動
#ifeq
同様、比較は比較する文字列と対象の格文字列が数値である場合、数値として処理されます。あるいは大文字小文字を識別する文字列として処理されます。
{{#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{{#switch: 100 | 1e1 = ten | 1e2 = hundred | other}}
→ hundred
{{#switch: a | a = A | b = B | C}}
→ A{{#switch: A | a = A | b = B | C}}
→ C
case
文字列は空白の場合があります。
{{#switch: | = Nothing | foo = Foo | Something }}
→ Nothing
一致が見つかると、それ以降のcases
は無視されます。
{{#switch: b | f = Foo | b = Bar | b = Baz | }}
→ Bar
生の等号
"Case" 文字列には生の等号を含めることができません。これを回避するには、{{=}} マジックワードを使用して、等号記号を HTML コード =
に置き換えます。
例:
入力 | 出力 |
---|---|
{{#switch: 1=2
| 1=2 = raw
| 1<nowiki>=</nowiki>2 = nowiki
| 1{{=}}2 = template
| default
}}
|
template |
{{#switch: 1=2
| 1=2 = html
| default
}}
|
html |
#ifeqの置換
拡張深度を減らすには #switch
を使用。
例:
{{#switch:{{{1}}} |condition1=branch1 |condition2=branch2 |condition3=branch3 |branch4}}
は、以下と同等です
{{#ifeq:{{{1}}}|condition1 |branch1 |{{#ifeq:{{{1}}}|condition2 |branch2 |{{#ifeq:{{{1}}}|condition3 |branch3 |branch4}}}}}}
つまり、深い入れ子、線形:
{{#ifeq:{{{1}}}|condition1
|<!--then-->branch1
|<!--else-->{{#ifeq:{{{1}}}|condition2
|<!--then-->branch2
|<!--else-->{{#ifeq:{{{1}}}|condition3
|<!--then-->branch3
|<!--else-->branch4}}}}}}
一方、switchの交換は、両方のブランチにネストされたIF(インデントの代替で示され、両側にインデントされている)の場合、複雑/非実用的であり、完全に対称的なツリーになります。
{{#ifeq:{{{1}}}|condition1
|<!--then-->branch1t{{
#ifeq:{{{1}}}|condition2
|<!--then-->branch1t2t{{#ifeq:{{{1}}}|condition4|<!--then-->branch1t2t4t|<!--else-->branch1t2t4e}}
|<!--else-->branch1t2e{{#ifeq:{{{1}}}|condition5|<!--then-->branch1t2e5t|<!--else-->branch1t2e5e}}
}}
|<!--else-->branch1e{{#ifeq:{{{1}}}|condition3
|<!--then-->branch1e3t{{#ifeq:{{{1}}}|condition6|branch1e3t6t|branch1e3t6e}}
|<!--else-->branch1e3e{{
#ifeq:{{{1}}}|condition7
|branch1e3e7t
|branch1e3e7t
}}
}}
}}
#time
コード | 説明 | 現在の出力 (更新するにはこのページのキャッシュを破棄してください) |
---|---|---|
年 | ||
Y |
4 桁の年 | 2025 |
y |
2 桁の年 | 25 |
L |
閏年の場合 1、平年の場合 0 | 0 |
o [note 1] |
指定した週の ISO-8601 年[note 2] | 2025[note 3] |
月 | ||
n |
月番号、ゼロ補完なし | 5 |
m |
月番号、ゼロ補完あり | 05 |
M |
サイトの言語での月名の省略形 | 5月 |
F |
サイトの言語での完全な月名 | 5月 |
xg |
属格と主格を区別する表示言語では、月の名前の表記を属格形式で出力。このオプションはスラヴ語派のポーランド語やロシア語、ベラルーシ語やチェコ語、スロバキア語やスロベニア語、ウクライナ語などに使える。 | ポーランド語の例:{{#time:F Y|June 2010|pl}} → czerwiec 2010(主格) {{#time:d xg Y|20 June 2010|pl}} → 20 czerwca 2010(所有格) |
月または年の通算日 | ||
j |
日、ゼロ補完なし | 16 |
d |
日、ゼロ補完あり | 16 |
z |
日 (1月 1 = 0).![]() |
135 |
週および曜日 | ||
W |
ISO 8601 週番号、ゼロ補完あり | 20 |
N |
ISO 8601 曜日番号 (月曜日 = 1、日曜日 = 7) | 5 |
w |
曜日番号 (日曜日 = 0、土曜日 = 6) | 5 |
D |
曜日の略号。翻訳されない場合が多い。 | 金 |
l |
曜日の省略しない表記。翻訳されない場合が多い。 | 金曜日 |
時 | ||
a |
午前 (00:00:00 ~ 11:59:59) の場合「am」、午後 (12:00:00 ~ 23:59:59) の場合「pm」 | am |
A |
上の a の大文字版。 |
AM |
g |
時、12 時間制、ゼロ補完なし | 11 |
h |
時、12 時間制、ゼロ補完あり | 11 |
G |
時、24 時間制、ゼロ補完なし | 11 |
H |
時、24 時間制、ゼロ補完あり | 11 |
分と秒 | ||
i |
分、ゼロ補完あり | 06 |
s |
秒、ゼロ補完あり | 09 |
U |
Unix 日時。 1970年1月1日 00:00:00 GMT からの経過秒数 | 1747393569 |
タイムゾーン (1.22wmf2 時点) | ||
e |
タイムゾーン識別子 | UTC |
I |
日時がサマータイムかどうか | 0 |
O |
グリニッジ標準時 (GMT) との差 | +0000 |
P |
グリニッジ標準時 (GMT) との差、コロン付き | +00:00 |
T |
タイムゾーンの省略形 | UTC |
Z |
タイムゾーンのオフセット (秒) | 0 |
その他 | ||
t |
日 | 31 |
c |
ISO 8601 形式の日付、Y-m-d"T"H:i:s+00:00 と同等。 |
2025-05-16T11:06:09+00:00 |
r |
RFC 5322 形式の日時、D, j M Y H:i:s +0000 と同等だが、曜日と月名は国際化されない。 |
Fri, 16 May 2025 11:06:09 +0000 |
グレゴリオ暦以外 | ||
イスラム暦 | ||
xmj |
日 | 18 |
xmF |
完全な月名 | ズー=ル=カアダ |
xmn |
月番号 | 11 |
xmY |
完全な年 | 1446 |
イラン暦 (Jalaly) | ||
xit |
月間の日数 | 31 |
xiz |
日 | 56 |
xij |
日 | 26 |
xiF |
完全な月名 | オルディーベヘシュト |
xin |
月番号 | 2 |
xiY |
完全な年 | 1404 |
xiy |
2 桁の年 | 04 |
ユダヤ暦 | ||
xjj |
日 | 18 |
xjF |
完全な月名 | イヤール |
xjt |
月の日数 | 29 |
xjx |
月名の所有格 | イヤール |
xjn |
月番号 | 8 |
xjY |
完全な年 | 5785 |
タイ太陽暦 | ||
xkY |
タイ太陽暦の完全な年。![]() |
2568 |
民国紀元/主体暦 | ||
xoY |
完全な年 | 114 |
日本の年号 | ||
xtY |
完全な年 | 令和7 |
フラグ | ||
xn |
後続の数値をそのまま半角英数字に整形する。 | ヒンディー語では、{{#time:H, xnH}} は ०६, 06 を返す。 |
xN |
xn と同様ですが、トグル フラグとして文字列の終端または文字列に次の xN が出現するまで保持されます。 | |
xr |
後続の数値をローマ数字に整形する。10,000 までの数値で動作する。 (MediaWiki 1.20 以前は上限 3,000) |
{{#time:xrY}} → MMXXV |
xh |
後続の数値をヘブライ数字に整形する。 | {{#time:xhY}} → ב'כ"ה |
このパーサ関数は日付あるいは時間 (グレゴリア暦) を取って指定の文法どおりにフォーマットします。日・時間のオブジェクトを特定する方法; 既定値は マジックワード {{CURRENTTIMESTAMP}}
– つまりページが最近 HTML 形式で表示された日時。
{{#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 }}
右の図には利用できる書式コードをまとめてあります。 書式文字列内にこれら以外の文字が含まれると、未処理で出力します。空白類も扱いは同様です (コードの解析に不要なため)。 書式文字列で文字が認識されず、日付/時刻オブジェクトにエラーがない場合、書式文字列が出力として返されます。 また書式文字列内の文字をエスケープする方法が 2 つあります。
- バックスラッシュに続けて書式指定文字列を記述すると、ひとまとまりのリテラル文字として解釈
- 文字列を二重引用符で囲むと、リテラル文字として扱い引用符を除去。
またさらに、有向グラフ xx
の場合、ひとまとまりのリテラル文字「x」と解釈します。
書式設定コードのリストは進化し続けているため (新しいカレンダーのサポートや、異なる方法で計算および書式設定された新しい日付フィールドのサポートなど)、変更せずに渡す必要があるすべてのリテラル文字 (書式設定コードで現在使用されている ASCII 文字だけでなく) をエスケープする必要があります。
残念ながら、現時点では、ASCII 一重引用符は、現在サポートされている ASCII 二重引用符(たとえば、JSON、C、C++ での文字列値の区切りなどの他の用途では二重引用符が必須です)とバックスラッシュ(JSON、C、C++、PHP、JavaScript、Lua など多くの言語で使用される文字列定数でもエスケープする必要があります)に代わるリテラル テキストをマークするための単純な代替手段としてはまだ認識されていません。 したがって、バックスラッシュでエスケープせずにリテラルの二重引用符を埋め込むことはできません (または、代わりに他の波型、角型、四角型の引用符を使用することもできます)。
{{#time: Y-m-d }}
→ 2025-05-16{{#time: [[Y]] m d }}
→ 2025 05 16{{#time: [[Y (year)]] }}
→ 2025 (25UTCamFri, 16 May 2025 11:06:09 +0000){{#time: [[Y "(year)"]] }}
→ 2025 (year){{#time: i's" }}
→ 06'09"
PHPはdate/time object
を受け取ると、どの書式でも strtotime() 関数で処理します (訳注:英文形式の日付を Unix タイムスタンプに変換)。
絶対時間 (例: 20 December 2000
)、相対時間 (例: +20 hours
)、および組み合わせ時間 (例: 30 July +1 year
) が受け入れられます。
{{#time: r|now}}
→ Fri, 16 May 2025 11:06:10 +0000{{#time: r|+2 hours}}
→ Fri, 16 May 2025 13:06:10 +0000{{#time: r|now + 2 hours}}
→ Fri, 16 May 2025 13:06:10 +0000{{#time: r|20 December 2000}}
→ Wed, 20 Dec 2000 00:00:00 +0000{{#time: r|December 20, 2000}}
→ Wed, 20 Dec 2000 00:00:00 +0000{{#time: r|2000-12-20}}
→ Wed, 20 Dec 2000 00:00:00 +0000{{#time: r|2000 December 20}}
→ エラー: 日時が無効です。
ISO 639-3 (?) の言語コード
により、文字列を選択した言語で表示します。
{{#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
local
パラメーターは、「日付/時刻オブジェクト」がローカルタイムゾーンを参照するかUTCを参照するかを指定します。
これは真偽値のパラメーターです。その値は、引数の値をキャストすることによって決定されます(文字列を真偽値にキャストする方法の詳細については、公式PHPドキュメントを参照してください)。
$wgLocaltimezone
がUTC
に設定されている場合、local
がtrue
またはfalse
に設定されていても、出力に違いはないことに注意してください。詳細については、次の例を参照してください:
{{#time: Y F d H:i:s|now|it|0}}
→ 2025 maggio 16 11:06:11{{#time: Y F d H:i:s|now|it|1}}
→ 2025 maggio 16 11:06:11{{#time: Y F d H:i:s|+2 hours||0}}
→ 2025 5月 16 13:06:11{{#time: Y F d H:i:s|+2 hours||1}}
→ 2025 5月 16 13:06:11
{{#time:c|2019-05-16T17:05:43+02:00|it}}
→ 2019-05-16T15:05:43+00:00{{#time:c|2019-05-16T17:05:43+02:00|it|0}}
→ 2019-05-16T15:05:43+00:00{{#time:c|2019-05-16T17:05:43+02:00|it|true}}
→ 2019-05-16T15:05:43+00:00
Unix タイムスタンプを計算する場合は、文字列の先頭に @
記号を付けると日付計算に使えます。
{{#time: U | now }}
→ 1747393571{{#time: r | @1747393569 }}
→ Fri, 16 May 2025 11:06:09 +0000
完全または部分的な絶対日付を指定できます。この関数は current 値を使用して、指定されていない日付の部分を「補完」します。
{{#time: Y | January 1 }}
→ 2025
4桁の数字は常に年として解釈され、時間や分としては解釈されません。[1]
{{#time: Y m d H:i:s | 1959 }}
→ 1959 05 16 00:00:00
6桁の数字は時間と解釈、できるかぎり分と秒まで出力しようとしますが、それ以外の場合はエラーになります (たとえば年月日とは解釈しません)。
{{#time: Y m d H:i:s | 195909 }}
→ 2025 05 16 19:59:09 記述したコードは年とゼロ補完の月と日を要求したのに、出力は時間として解釈。{{#time: Y m d H:i:s | 196009 }}
→ エラー: 日時が無効です。 19:60:09 は有効な時刻ではないにもかかわらず、196009 は1960年9月とは解釈されません。
関数は日付計算をこなそうとします。(訳注:Fは「サイトの言語での完全な月名」、dはゼロ補完の日を求め、入力値の不備で出力結果が不定形。)
{{#time: d F Y | January 0 2008 }}
→ 31 12月 2007{{#time: d F | January 32 }}
→ エラー: 日時が無効です。{{#time: d F | February 29 2008 }}
→ 29 2月{{#time: d F | February 29 2007 }}
→ 01 3月{{#time:Y-F|now -1 months}}
→ 2025-4月
#time
に対する書式文字列の総文字数(すべての呼び出しでの総和)は半角6000文字に制限されています[2]。
タイムゾーンの問題点
この#timeパーサ関数(より具体的にはPHP DateTime )には相対的なタイムゾーンオフセットとして整数以外 は渡せないというバグがあります。EDT (東部夏時間) など時間通りのタイムゾーンを使用する場合、この問題は発生しません。例をあげます。:
{{#time:g:i A | -4 hours }}
→ 7:06 AM
ところがインドは UTC (協定世界時) との時差が +5.5 時間のため、タイムゾーンを適用すると通常なら正しいオフセットの計算に失敗するはずです。実例はこちら:
{{#time:g:i A | +5.5 hours }}
→ 11:06 AM
そこで回避策として、単純に時間を分か秒 (minutes か seconds) に換算して、次の例のように与えます。
{{#time:g:i A | +330 minutes }}
→ 4:36 PM{{#time:g:i A | +19800 seconds }}
→ 4:36 PM
(関数の開発者 Tim Starling がこれを解決する構文を書いてくれました。)
署名などの#time書式
時にはタイムスタンプを構築すると便利で、見た目はトークページの議論で署名機能が自動生成するタイムスタンプそっくりです。 英語版ウィキ類の場合は、以下の方法で生成します。
{{#timel:H:i, j xg Y (e)|+330 minutes}}
→ 16:36, 16 5月 2025 (UTC)
#timel
この関数は構文のショートカットで local
パラメータに true
を設定すると挙動は {{#time: ... }}
と同一、常に利用者が設定した標準時またはウィキが設定した時間帯を使用 (タイムゾーンの設定は $wgLocaltimezone に従う)
関数の構文は次のとおりです:
{{#timel: format string }}
{{#timel: format string | date/time object }}
{{#timel: format string | date/time object | language code }}
$wgLocaltimezone
がUTC
に設定されている場合、local
がtrue
またはfalse
に設定されていても、出力に違いはないことに注意してください。
例えば、以下の例を参照してください:
{{#time:c|now|it}}
→ 2025-05-16T11:06:11+00:00{{#time:c|now|it|0}}
→ 2025-05-16T11:06:11+00:00{{#time:c|now|it|1}}
→ 2025-05-16T11:06:11+00:00{{#timel:c|now|it}}
→ 2025-05-16T11:06:11+00:00

#timef
この関数は選択した言語の標準の書式を日付に与え、 $dateFormats
で定義した通りです(詳細はT223772を参照)。
{{#timef: 日時オブジェクト }}
{{#timef: 日時オブジェクト | 書式の種別 }}
{{#timef: 日時オブジェクト | 書式の種別 | 言語コード }}
date/time object の書式は#timeの場合と同じです。空欄の場合、ページをレンダリングした時点を採用します。
書式の種別は以下のいずれかの場合があります。
time
- 時間のみ表示。
date
- 日付のみ表示。
both
- 日付と時間の両方を表示。
pretty
- 年を省いた略式の日付のみ表示。 これはすべての言語に対応していませんので、非対応の場合は 「date」書式を採用。
書式の種別 format type を指定しない場合はまるで both
を指定したように、時間と日付を表示します。
もしも「言語コード」を指定しない場合は、そのページの内容の言語を採用。
言語単位で日付の書式が異なることから、#time
の代わりに #timef
を用いて、多言語への対応を簡素にしてあります。
英語では月日の順序を$wgAmericanDates
で調節します。
例:
{{#timef:now|both|en}}
→ 11:06, 16 May 2025{{#timef:now|both|ja}}
→ 2025年5月16日 (金) 11:06{{#timef:now|pretty|en}}
→ 16 May{{#timef:now|pretty|pl}}
→ 16 maja{{#timef:|time}}
→ 11:06
#timefl
この関数は #timef と同等ですが、$wgLocaltimezone に設定したその地域の標準時を採用します。
{{#timefl: date/time object }}
{{#timefl: date/time object | format type }}
{{#timefl: date/time object | format type | language code }}
#titleparts
この関数は、ページ名をスラッシュに基づいてセグメントに分離し、それらのセグメントの一部を出力します。
{{#titleparts: ページ名 | 返すセグメント数 | 最初に返すセグメント }}
返すセグメントの数 パラメータの指定がない場合、既定値は0 で、「開始セグメント」から(含まれた)末尾までセグメント全件を返します。開始セグメント パラメータを指定していない、または0 の場合は、既定値は1 です。
{{#titleparts: Talk:Foo/bar/baz/quok }}
→ Talk:Foo/bar/baz/quok{{#titleparts: Talk:Foo/bar/baz/quok | 1 }}
→ Talk:Foo {{ROOTPAGENAME}} も参照してください。{{#titleparts: Talk:Foo/bar/baz/quok | 2 }}
→ Talk:Foo/bar{{#titleparts: Talk:Foo/bar/baz/quok | 2 | 2 }}
→ bar/baz{{#titleparts: Talk:Foo/bar/baz/quok | 2 | 3 }}
→ baz/quok{{#titleparts: Talk:Foo/bar/baz/quok | 3 | 2 }}
→ bar/baz/quok{{#titleparts: Talk:Foo/bar/baz/quok | | 2 }}
→ bar/baz/quok{{#titleparts: Talk:Foo/bar/baz/quok | | 5 }}
→
両方の値に負の値が受け入れられます。返されるセグメントの数パラメータの負の値は、文字列の末尾からセグメントを効果的に「ストリップ」します。 「最初に返されるセグメント」の負の値は、「このセグメントを右から数えて開始する」という意味になります。
{{#titleparts: Talk:Foo/bar/baz/quok | -1 }}
→ Talk:Foo/bar/baz 文字列の最後から数えてはじめのセグメントを削除します。 {{BASEPAGENAME}} も参照してください。{{#titleparts: Talk:Foo/bar/baz/quok | -4 }}
→ 文字列の末尾から4つのセグメントすべてを削除します{{#titleparts: Talk:Foo/bar/baz/quok | -5 }}
→ 文字列の末尾から5つのセグメントを削除します(存在する以上){{#titleparts: Talk:Foo/bar/baz/quok | | -1 }}
→ quok 最後のセグメントを返します。 {{SUBPAGENAME}} も参照してください。{{#titleparts: Talk:Foo/bar/baz/quok | -1 | 2 }}
→ bar/baz 文字列の末尾から1つのセグメントを削除してから、2番目以降のセグメントを返します{{#titleparts: Talk:Foo/bar/baz/quok | -1 | -2 }}
→ baz 最後から2番目の要素からコピーを開始します。文字列の末尾から1つのセグメントを削除します
処理する前に、「pagename」パラメータはHTMLでデコードされます。標準のHTML文字エンティティが含まれている場合、それらはプレーン文字に変換されます(UTF-8で内部的にエンコードされます。つまり、MediaWikiソースページで使用するのと同じエンコードです。このパーサー関数)。
- たとえば、pagenameに
"
、"
、または"
が含まれている場合は、"
に置き換えられます。 - HTMLからプレーンテキストへの他の変換は実行されないため、HTMLタグは、ページ名で無効であっても、この最初のステップではそのまま残ります。
{{PAGENAME }}
など) は、入力パラメータが HTML エンコードされていない場合でも、不必要に HTML エンコードされた文字列を返すことが知られています。
titleparts パーサー関数を回避策として使用して、これらの返された文字列を変換できます。これにより、パラメータにページ名を受け取るがHTMLエンコードされた入力文字列では依然として正しく動作しない他のパーサー関数 ({{PAGESINCAT: }}
など) によっても正しく処理できるようになります。
たとえば、現在のページが Category:Côte-d'Or の場合、次のようになります。
{{#ifeq: {{FULLPAGENAME}} | Category:Côte-d'Or | 1 | 0 }}
と{{#ifeq: {{FULLPAGENAME}} | Category:Côte-d'Or | 1 | 0 }}
は両方とも1
を返します (#ifeq パーサー関数は入力パラメータの HTML デコードを実行します)。{{#switch: {{FULLPAGENAME}} | Category:Côte-d'Or = 1 | #default = 0 }}
と{{#switch: {{FULLPAGENAME}} | Category:Côte-d'Or = 1 | #default = 0 }}
は両方とも1
を返します (#switch パーサー関数は入力パラメータの HTML デコードを実行します)。- $code 0、$code 1、または
{{#ifexist: Category:Côte-d'Or | 1 | 0 }}
はすべて、そのカテゴリ ページが存在する場合は1
を返します (#ifexist パーサー関数は入力パラメータの HTML デコードを実行します)。 - カテゴリにページまたはサブカテゴリが含まれている場合、
{{PAGESINCAT: Côte-d'Or }}
はゼロ以外の数値を返しますが、: {{PAGESINCAT: {{CURRENTPAGENAME}} }}
は、次のように 無条件に 0 を返す場合があります:{{PAGESINCAT: {{PAGENAME:Category:Côte-d'Or}} }}
{{PAGESINCAT: {{PAGENAME:Category:Côte-d'Or}} }}
この予期しない動作の理由は、MediaWiki の現在のバージョンには 2 つの注意事項があるためです。
{{FULLPAGENAME}}
、または{{FULLPAGENAME:Côte-d'Or}}
は、期待されるCategory:Côte-d'Or
ではなく、実際に HTML エンコードされた文字列Category:Côte-d'Or
を返す場合があります。{{PAGESINCAT: Côte-d'Or }}
は 無条件に 0 を返します (PAGESINCAT マジック キーワードは入力パラメータの HTML デコードを実行しません)。
titleparts を使用した簡単な解決策 (両方の注意点が MediaWiki の新しいバージョンで修正されれば引き続き機能します) は次のとおりです。
{{PAGESINCAT: {{#titleparts: {{CURRENTPAGENAME}} }} }}
{{PAGESINCAT: {{#titleparts: {{PAGENAME:Category:Côte-d'Or}} }} }}
{{PAGESINCAT: {{#titleparts: {{PAGENAME:Category:Côte-d'Or}} }} }}
、これらはすべて同じカテゴリ内の実際のページ数を返します。
次に、デコードされたページ名は、可能な限り MediaWiki でサポートされている標準のページ名に正規化されます。
- すべてのアンダースコアは自動的にスペースに置き換えられます。
{{#titleparts: Talk:Foo/bah_boo|1|2}}
→ bah boo 原文では下線が付いていますが、bah_booではありません。
- 文字列は最大 25 回分割され、それ以降のスラッシュは無視され、25 番目の要素に文字列の残りが含まれます。 文字列は ページ名 として扱われるため、255 文字に制限されます。
{{#titleparts: a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/aa/bb/cc/dd/ee | 1 | 25 }}
→ y/z/aa/bb/cc/dd/ee- 何らかの理由でこの関数を限界まで押し上げる必要が生じた場合、可能性は低いですが、関数呼び出しをネストすることで最大 25 回の分割制限を回避することができます。
{{#titleparts: {{#titleparts: a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/aa/bb/cc/dd/ee| 1 | 25 }} | 1 | 2}}
→ z
- 最後に、最初の部分文字列は、ローカル Wiki の大文字化設定に従って大文字化されます (その部分文字列もローカル名前空間名で始まる場合は、その名前空間名も正規化されます)。
{{#titleparts: talk:a/b/c }}
→ Talk:A/b/c
{{#titleparts: one/two/three/four|1|1 }}
→ One{{#titleparts: one/two/three/four|1|2 }}
→ two
小文字を求めるには lc: 関数を使い出力をコントロールします。
{{lc: {{#titleparts: one/two/three/four|1|1 }} }}
→ one
文字列の先頭に「ダミー」のスラッシュを追加して、最初の部分文字列の大文字化 (大文字または小文字) を正しく行うことができます。返される最初のセグメント には、1
ではなく 2
を使用します。
{{#titleparts: /one/two/three/four|1|2 }}
→ one{{#titleparts: /One/two/three/four|1|2 }}
→ One
文字列関数
ParserFunctions 拡張機能は、$wgPFEnableStringFunctions
が true
に設定されている場合、オプションでさまざまな文字列関数を定義します:
#len
#pos
#rpos
#sub
#count
#replace
#explode
#urldecode
解説は特設したサブページ、例えばManual:Performing string operations with parser functions を参照してください。
Module:String 関数の簡単な概要は次のとおりです。
- #len (文字列の長さ):
{{#invoke:String|len|target_string}}
- #sub (部分文字列):
{{#invoke:String|sub|target_string|start_index|end_index}}
- #match:
{{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}}
- #pos (ターゲットの位置):
{{#invoke:String|pos|target_string|index_value}}
- #find:
{{#invoke:String|find|source_string|target_string|start_index|plain_flag}}
- #replace:
{{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}
- #rep (繰り返し):
{{#invoke:String|rep|source|count}}
- #escapePattern:
{{#invoke:String|escapePattern|pattern_string}}
- #count:
{{#invoke:String|count|source_str|pattern_string|plain_flag}}
- #join:
{{#invoke:String|join|separator|string1|string2|...}}
全般的な情報
subst展開
パーサー関数の subst展開は、ハッシュ記号の前にsubst:
を足します。
{{subst:#ifexist: Help:Extension:ParserFunctions/ja | [[Help:Extension:ParserFunctions/ja]] | Help:Extension:ParserFunctions/ja }}
→[[Help:Extension:ParserFunctions/ja]]
というページが存在するため、コード Help:Extension:ParserFunctions/ja がウィキテキストに挿入されます。
Subst展開は <ref>
…</ref>
; では機能しないので、予測する結果を得るには{{subst:#tag:ref|
…}}
を使ってください。
リダイレクト
中でも{{#time:
…|now-
…}} は文中に日付を含むページのリダイレクト で特に利便性が高そうに見えても、実用上は機能しません。
パイプ記号のエスケープ
表の場合
パーサー関数はウィキ記述の表 wikitable の構文を断ち切りパイプ記号 (|
) に与える役目を変質させ、生のパイプ記号は単に変数の区切り子として扱います。
回避策として過去にはほとんどのウィキで Template:! テンプレートを使い生のパイプ記号 (|
) 単体のみ記していたところ、MW 1.24 以降はこの苦しい方法に代わって {{!}}
マジックワード が使えます。
これは見た目にパイプ記号を MediaWiki 関数に対して〈不可視化〉することで、特定のページ内のテンプレート類や変数がすべて展開するまで、処理の対象として保留されます。
そして表の列や行の区切り子として解釈されます。
代案として生の HTML 形式の関数の表を使う方法もあり、ただし直感的に記述しにくくエラー発生の確率も高めです。
パイプ記号|は、解釈していない(平文の)文字としてエスケープすることも可能です。これには HTML エンティティまたは|
を使います。
説明 | 入力内容 | 結果 |
---|---|---|
パイプ記号を表の行/列区切りとしてエスケープ | {{!}} |
| |
パイプ記号をプレーンな文字としてエスケープ | | |
| |
テンプレート呼び出しの場合
以下の例でも、パイプ記号の保護機能が適用されます。
{{Documentation|content= ... text before ...<code>subpage-name=sandbox3</code> is equivalent to <code>sandbox link=../sandbox3 | sandbox name=sandbox3</code>. ... text after ... }}
sandbox name=の直前にパイプ記号|が存在する場合にtext afterが表示されない理由は、テンプレートDocumentationのパラメータとして|sandbox name=と|content=が同じレベルと誤認されるからです。
空白類の除去
空白 (改行、タブ、空白アキ) はパーサ関数の全パラメータの開始から終了まで除去します。これを回避するには、引用符で囲んでから文字列を比較します。
{{#ifeq: foo | foo | equal | not equal }}
→ equal{{#ifeq: "foo " | " foo" | equal | not equal }}
→ not equal
then 部分および else 部分での空白の除去を回避する方法は m:Template:If を参照してください。空白の代わりに <nowiki> </nowiki> を使用することもできます。
foo{{#if:|| bar }}foo
→ foobarfoofoo{{#if:||<nowiki /> bar <nowiki />}}foo
→ foo bar foo
ただし連続する複数の空白文字はパーサにより1文字に圧縮されるため、この方法により処理できるのは1文字の空白文字に限定されます。
<span style="white-space: pre;">foo{{#if:||<nowiki/> bar <nowiki/>}}foo</span>
→ foo bar foo
このサンプルでは white-space: pre
書式を採用してブラウザ上で非表示でも、空白スペースが保持されるように強制します。ソフトウェアにより、ブラウザに渡す前に空白文字が除去されるため発生します。
この挙動を回避するには、ソフトウェアによって置換されないように空白類を  
(改行可能空白) または
(改行不可空白、nbsp) に置換します。
<span style="white-space: pre;">foo{{#if:||   bar   }}foo</span>
→ foo bar foofoo{{#if:|| bar }}foo
→ foo bar foo
パラメータ同士の重みづけは同等でない点にご注意ください。 パーサ関数 ParserFunctions では、冒頭と末尾の空白スペースは常に除去されます。 テンプレート では冒頭と末尾の空白スペースは名前付きパラメータと名前をつけた名無しパラメータに関しては除去、ただし名無しのままのパラメータからは除去しません :
foo{{1x|content= bar}}foo
→ foobarfoofoo{{1x|1= bar}}foo
→ foobarfoofoo{{1x| bar }}foo
→ foo bar foo
その他のパーサー関数
大文字小文字の切り替え関数
- 小文字:
"{{lc: AbC}}"
→ "abc" - 大文字:
"{{uc: AbC}}"
→ "ABC" - 小文字の頭文字:
"{{lcfirst: AbC}}"
→ "abC" - 大文字の頭文字:
"{{ucfirst: abc}}"
→ "Abc"
コード化の関数
- URL のエンコード:
"{{urlencode: AbC
dEf ghi}}"
次のように表示
"AbC%0AdEf+ghi"
そこで内部の新しい行は %0A に、内部の空白は + に変換されます。
アンカーの符号化
{{anchorencode: AbC dEf ghi}}
次のように表示
AbC_dEf_ghi
関連項目
- Help:テンプレート内でのパーサー関数
- パーサー拡張機能のタグ
- Parser function hooks - コアと拡張機能が追加したパーサ関数の一覧 (未完成)。
- Manual:Newlines and spaces
- Manual:Converting between ParserFunctions syntax and TeX syntax
- Help:マジックワード - 特に番号の書式設定とパッディング(余白)
- Module:String は Extension:StringFunctions を廃止
- Extension:PhpTags
- ウィキベース対応のパーサ関数 (拡張機能によりウィキデータ収載を有効化): ウィキメディア プロジェクト#パーサー関数でデータをどう扱うか
脚注
- ↑ 2011年のr86805以前とは扱いが変わりました。
- ↑ phabricator.wikimedia.orgのExtParserFunctions.php を参照してください。