![]() | 注意: このページを編集すると、編集内容がCC0 のもとで公開されることに同意したと見なされます。詳細はパブリック・ドメインのヘルプ ページを参照してください。 | ![]() |
ParserFunctions(パーサ関数)拡張機能は MediaWiki に既存の「マジックワード」を補完するパーサ関数を提供します。(文字列処理のために追加のパーサー関数を提供するように設定できるかもしれません。ここでいう文字列関数の説明文書はこちらを参照してください。)この拡張機能が提供するすべてのパーサー関数は以下の形式です:
{{#関数名:引数 1 |引数 2 |引数 3 ... }}
種類 | 演算子 |
---|---|
グループ化 (括弧) | ( ) |
数値 | 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,137,941 になりますが、18137941 が必要です。これは{{formatnum:{{NUMBEROFUSERS}}|R}}
を使用して取得できます。これは、数字が翻訳される一部の言語では特に重要です。たとえば、ベンガル語では、{{NUMBEROFUSERS}} は ৩০,০৬১ を生成します。
{{#expr:{{NUMBEROFUSERS}}+100}}
→Expression error: Unrecognized punctuation character ",".{{#expr:{{formatnum:{{NUMBEROFUSERS}}|R}}+100}}
→18138041![]() | 演算子mod は、第 2 引数の値によっては誤った結果を返す場合があります:
|
左側の数字を四捨五入して 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.5678round -2 }} | 1200 | 負の値は小数点の左側に丸められるため、100に最も近い値に丸められます。 | ||
{{#expr: 1234.5678round 2 }} | 1234.57 | 正の値は小数点の右側に丸められるため、最も近い100番目に丸められます | ||
{{#expr: 1234.5678 round 2.3 }} | 1234.57 | round の右の値の小数点以下は、丸めの結果には影響しません | ||
{{#expr:trunc 1234.5678 }} | 1234 | 小数点以下の切り捨て | ||
最も近い整数への丸め | ||||
{{#expr: 1/3round 0 }} | 0 | 最も近い整数への切り捨てで 0 | ||
{{#expr: 1/2round 0 }} | 1 | 最も近い整数への切り上げで 1 | ||
{{#expr: 3/4round 0 }} | 1 | 最も近い整数への切り上げで 1 | ||
{{#expr: -1/3round 0 }} | -0 | 最も近い整数への切り上げで 0 | ||
{{#expr: -1/2round 0 }} | -1 | 最も近い整数への切り捨てで -1 | ||
{{#expr: -3/4round 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: パラメーター 1| パラメーター 2| パラメーター 3}}
この関数は、初めに最初の引数が空でないか確かめます。最初の引数が空でない場合、2 番目の引数を表示します。最初の引数が空または空白文字(空白、改行等)のみを含む場合、3 番目の引数を表示します。
{{#if:| yes| no}}
→no{{#if: string| yes| no}}
→yes{{#if: | yes| no}}
→yes{{#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にテキストを入力しました|変数1にテキストがありません}}
このパーサー関数の他の例についてはHelp:テンプレート内でのパーサー関数 を参照してください。
このパーサー関数は、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![]() | パーサー関数内で使用する場合、パーサータグおよびその他のパーサー関数は一時的に一意のコードに置き換える必要があります。 これは比較に影響します:
|
![]() | PAGENAMEマジックワードとの文字通りの比較は、サイトの構成によっては失敗する場合があります。 たとえば、ウィキによっては、{{FULLPAGENAME}}が最初の文字を大文字にし、すべてのアンダースコアをスペースに置き換える場合があります。 これを回避するには、両方のパラメーターにマジックワードを適用します。
|
この関数は入力文字列を取り、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:<strongclass="error">a</strong>| error| correct}}
→errorエラーによっては追跡カテゴリを生じさせ、{{#iferror:}}
を当てても同カテゴリの追加を回避できません。
この関数は数式を評価し、結果の真偽値に応じて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![]() | #ifexpr による数値比較の結果は、#ifeq や#switch の結果と必ずしも一致しません。 これらの後者の2つは、#ifexpr よりも正確であり、同等の結果を返しません。変更された最後の桁とのこれらの比較を検討してください:
数字が異なると、equalの結果は実際には正しくありません。 #ifexpr でのこの動作は、MediaWikiが式のリテラル数をfloat(フロート)型に変換するために発生します。これは、このような大きな整数の場合、丸めを伴います。 |
この関数は入力文字列を受け取り、それをページ名として解釈し、そのページがローカルウィキに存在するかどうかに応じて、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がカスタマイズされていないため)MediaWiki 1.45 以前は、ページが#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:
は、「高負荷なパーサー関数」と見なされます。 1つのページに含めることができるのは限られた数だけです(参照読み込みされたテンプレート内の関数を含む)。この制限を超えると、参照読み込み先ページが存在するかどうかに関係なく、それ以降の#ifexist:
関数は自動的にfalseを返し、ページはCategory:Pages with too many expensive parser function calls に分類されます。tracking category の名前は、ウィキのコンテンツ言語によって異なる場合があります。
使用事例によっては、a.new
(存在しないページへのリンクを選択) またはa:not(.new)
(存在するページへのリンクを選択) を使用して ifexist 効果を css で代用できます。さらに、単一ページで使用するメモリ消耗の激しいパーサ関数の件数の上限は$wgExpensiveParserFunctionLimit
で制御され、必要な場合は上限値を LocalSettings.php で変更できます。
MediaWiki 1.45 まで当該ページは存在せず、#ifexistを使っているかどうかテスト済みのページは、募集ページに分類されました。根拠はT14019 に記述があり、 回避策の詳細はTemplate:Linkless を参照してください。(訳注:リンク元は削除済み)
この関数は相対ファイル パスを絶対ファイル パスに変換します。
{{#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:' などがあります。
関連項目:w:Help:Switch parser function
この関数は入力値1件を複数のテストケースと比較し、ヒットした場合は当該の文字列を返します。
{{#switch:comparison string |case =result |case =result |... |case =result |default result}}
例:
{{#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
文字列で明示的に宣言することもできます。
{{#switch:comparison string |case =result |case =result |... |case =result | #default =default result}}
この方法で宣言された既定の結果は、関数内のどこにでも配置できます。
{{#switch: test| foo= Foo| #default= Bar| baz= Baz}}
→ Bardefault
パラメータが省略され、一致が行われない場合、result
(結果)は返されません。
{{#switch: test| foo= Foo| baz= Baz}}
→いくつかのcase
文字列に同じresult
文字列を返す「フォールスルー」値を持たせることができます。これにより重複を最小限に抑えることができます。
{{#switch:comparison string |case1 =result1 |case2 |case3 |case4 =result234 |case5 =result5 |case6 |case7 =result67 | #default =default result}}
ここではケース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}}
→Ccase
文字列は空白の場合があります。
{{#switch:|= Nothing| foo= Foo| Something}}
→Nothing一致が見つかると、それ以降のcases
は無視されます。
{{#switch: b| f= Foo| b= Bar| b= Baz|}}
→Bar![]() | #switch および#ifeq を使用した数値比較は、式の比較と同等ではありません(上記も参照)。
|
"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 |
拡張深度を減らすには#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}}}}}}
コード | 説明 | 現在の出力 (更新するにはこのページのキャッシュを破棄してください) |
---|---|---|
年 | ||
Y | 4 桁の年 | 2025 |
y | 2 桁の年 | 25 |
L | 閏年の場合 1、平年の場合 0 | 0 |
o [note 1] | 指定した週の ISO-8601 年[note 2] | 2025[note 3] |
月 | ||
n | 月番号、ゼロ補完なし | 7 |
m | 月番号、ゼロ補完あり | 07 |
M | サイトの言語での月名の省略形 | 7月 |
F | サイトの言語での完全な月名 | 7月 |
xg | 属格と主格を区別する表示言語では、月の名前の表記を属格形式で出力。このオプションはスラヴ語派のポーランド語やロシア語、ベラルーシ語やチェコ語、スロバキア語やスロベニア語、ウクライナ語などに使える。 | ポーランド語の例:{{#time:F Y|June 2010|pl}} → czerwiec 2010(主格) {{#time:d xg Y|20 June 2010|pl}} → 20 czerwca 2010(所有格) |
月または年の通算日 | ||
j | 日、ゼロ補完なし | 18 |
d | 日、ゼロ補完あり | 18 |
z | 日 (1月 1 = 0).![]() | 198 |
週および曜日 | ||
W | ISO 8601 週番号、ゼロ補完あり | 29 |
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」 | pm |
A | 上のa の大文字版。 | PM |
g | 時、12 時間制、ゼロ補完なし | 8 |
h | 時、12 時間制、ゼロ補完あり | 08 |
G | 時、24 時間制、ゼロ補完なし | 20 |
H | 時、24 時間制、ゼロ補完あり | 20 |
分と秒 | ||
i | 分、ゼロ補完あり | 14 |
s | 秒、ゼロ補完あり | 51 |
U | Unix 日時。 1970年1月1日 00:00:00 GMT からの経過秒数 | 1752869691 |
タイムゾーン (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-07-18T20:14:51+00:00 |
r | RFC 5322 形式の日時、D, j M Y H:i:s +0000 と同等だが、曜日と月名は国際化されない。 | Fri, 18 Jul 2025 20:14:51 +0000 |
グレゴリオ暦以外 | ||
イスラム暦 | ||
xmj | 日 | 22 |
xmF | 完全な月名 | ムハッラム |
xmn | 月番号 | 1 |
xmY | 完全な年 | 1447 |
イラン暦 (Jalaly) | ||
xit | 月間の日数 | 31 |
xiz | 日 | 119 |
xij | 日 | 27 |
xiF | 完全な月名 | ティール |
xin | 月番号 | 4 |
xiY | 完全な年 | 1404 |
xiy | 2 桁の年 | 04 |
ユダヤ暦 | ||
xjj | 日 | 22 |
xjF | 完全な月名 | タムーズ |
xjt | 月の日数 | 29 |
xjx | 月名の所有格 | タムーズ |
xjn | 月番号 | 10 |
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-07-18{{#time:[[Y]] m d}}
→2025 07 18{{#time:[[Y (year)]]}}
→2025 (25UTCpmFri, 18 Jul 2025 20:14:51 +0000){{#time:[[Y "(year)"]]}}
→2025 (year){{#time: i's"}}
→14'51"PHPはdate/time object
を受け取ると、どの書式でもstrtotime() 関数で処理します (訳注:英文形式の日付を Unix タイムスタンプに変換)。絶対時間 (例:20 December 2000
)、相対時間 (例:+20 hours
)、および組み合わせ時間 (例:30 July +1 year
) が受け入れられます。
{{#time: r|now}}
→Fri, 18 Jul 2025 20:14:52 +0000{{#time: r|+2 hours}}
→Fri, 18 Jul 2025 22:14:52 +0000{{#time: r|now + 2 hours}}
→Fri, 18 Jul 2025 22:14:52 +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}}
→エラー: 日時が無効です。{{#time: r|last tuesday}}
→Tue, 15 Jul 2025 00:00:00 +0000ISO 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 2010local
パラメーターは、「日付/時刻オブジェクト」がローカルタイムゾーンを参照するかUTCを参照するかを指定します。
これは真偽値のパラメーターです。その値は、引数の値をキャストすることによって決定されます(文字列を真偽値にキャストする方法の詳細については、公式PHPドキュメントを参照してください)。
$wgLocaltimezone
がUTC
に設定されている場合、local
がtrue
またはfalse
に設定されていても、出力に違いはないことに注意してください。詳細については、次の例を参照してください:
{{#time: Y F d H:i:s|now|it|0}}
→2025 luglio 18 20:14:52{{#time: Y F d H:i:s|now|it|1}}
→2025 luglio 18 20:14:52{{#time: Y F d H:i:s|+2 hours||0}}
→2025 7月 18 22:14:52{{#time: Y F d H:i:s|+2 hours||1}}
→2025 7月 18 22:14:52{{#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:00Unix タイムスタンプを計算する場合は、文字列の先頭に@
記号を付けると日付計算に使えます。
{{#time: U| now}}
→1752869692{{#time: r | @1752869691 }}
→Fri, 18 Jul 2025 20:14:51 +0000![]() | もしタイムスタンプの数値の先頭に@ を付けないと、ほぼ毎回、エラーか想定外の値を返します。
|
![]() | 許容できる入力値は「1 January 0111 → 31 December 9999」の範囲です。年は100から110までが不定形です。Y (年) とうるう年はその 100-110 と同様に不定形、r (RFC 5322 形式)、D (曜日略号)、l (曜日)、U (Unix日時) を記述すると年を 2000-2010 の範囲として解釈します。
先頭に 0 を付けて 4 桁の書式にした場合を除いて、年の値 0-99 は 2000-2069 年および 1970-1999 年と解釈されます:
|
完全または部分的な絶対日付を指定できます。この関数はcurrent 値を使用して、指定されていない日付の部分を「補完」します。
{{#time: Y| January 1}}
→2025![]() | 補完の関数は不定形です。特定の部分は現在の値で補完され、別の部分はエラーになります。
満員の日の例外ケースがあります:
|
4桁の数字は常に年として解釈され、時間や分としては解釈されません。[1]
{{#time: Y m d H:i:s| 1959}}
→1959 07 18 00:00:006桁の数字は時間と解釈、できるかぎり分と秒まで出力しようとしますが、それ以外の場合はエラーになります (たとえば年月日とは解釈しません)。
{{#time: Y m d H:i:s| 195909}}
→2025 07 18 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-6月#time
に対する書式文字列の総文字数(すべての呼び出しでの総和)は半角6000文字に制限されています[2]。
この#timeパーサ関数(より具体的にはPHP DateTime )には相対的なタイムゾーンオフセットとして整数以外 は渡せないというバグがあります。EDT (東部夏時間) など時間通りのタイムゾーンを使用する場合、この問題は発生しません。例をあげます。:
{{#time:g:i A| -4 hours}}
→ 4:14 PMところがインドは UTC (協定世界時) との時差が +5.5 時間のため、タイムゾーンを適用すると通常なら正しいオフセットの計算に失敗するはずです。実例はこちら:
{{#time:g:i A| +5.5 hours}}
→ 8:14 PMそこで回避策として、単純に時間を分か秒 (minutes か seconds) に換算して、次の例のように与えます。
{{#time:g:i A| +330 minutes}}
→ 1:44 AM{{#time:g:i A| +19800 seconds}}
→ 1:44 AM(関数の開発者 Tim Starling がこれを解決する構文を書いてくれました。)
時にはタイムスタンプを構築すると便利で、見た目はトークページの議論で署名機能が自動生成するタイムスタンプそっくりです。英語版ウィキ類の場合は、以下の方法で生成します。
{{#timel:H:i, j xg Y (e)|+330 minutes}}
→ 01:44, 19 7月 2025 (UTC)この関数は構文のショートカットで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-07-18T20:14:52+00:00{{#time:c|now|it|0}}
→2025-07-18T20:14:52+00:00{{#time:c|now|it|1}}
→2025-07-18T20:14:52+00:00{{#timel:c|now|it}}
→2025-07-18T20:14:52+00:00![]() | UTC(旧称GMT)とは異なるタイムゾーンのウィキペディアでは、1970-01-01 00:00:00 UTC以降、時間と時間の両方のUが同じ秒数を返すことに注意してください。
|
この関数は選択した言語の標準の書式を日付に与え、$dateFormats
で定義した通りです(詳細はT223772を参照)。
{{#timef:日時オブジェクト }}
{{#timef:日時オブジェクト |書式の種別 }}
{{#timef:日時オブジェクト |書式の種別 |言語コード }}
date/time object の書式は#timeの場合と同じです。空欄の場合、ページをレンダリングした時点を採用します。
書式の種別は以下のいずれかの場合があります。
time
date
both
pretty
書式の種別format type を指定しない場合はまるでboth
を指定したように、時間と日付を表示します。
もしも「言語コード」を指定しない場合は、そのページの内容の言語を採用。
言語単位で日付の書式が異なることから、#time
の代わりに#timef
を用いて、多言語への対応を簡素にしてあります。
英語では月日の順序を$wgAmericanDates
で調節します。
例:
{{#timef:now|both|en}}
→ 20:14, 18 July 2025{{#timef:now|both|ja}}
→ 2025年7月18日 (金) 20:14{{#timef:now|pretty|en}}
→ 18 July{{#timef:now|pretty|pl}}
→ 18 lipca{{#timef:|time}}
→ 20:14この関数は#timef と同等ですが、$wgLocaltimezoneに設定したその地域の標準時を採用します。
{{#timefl:date/time object }}
{{#timefl:date/time object |format type }}
{{#timefl:date/time object |format type |language code }}
この関数は、ページ名をスラッシュに基づいてセグメントに分離し、それらのセグメントの一部を出力します。
{{#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 エンコードされた文字列を返すことが知られています。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 デコードを実行します)。{{#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ではありません。{{#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{{#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{{#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![]() | ページ名に使用すると法律違反となる特定の文字があると、#titleparts はその文字列を解析できない例は次のとおり:
|
![]() | ページ名の一部が「. 」または「.. 」だけの場合、#titleparts は文字列を解析しません。
|
![]() | この関数は、入力が UTF-8 で 255 バイトを超える場合、入力文字列を適切に劣化させません。入力文字列が 256 バイト以上の場合は、文字列全体が返されます。 |
ParserFunctions 拡張機能は、$wgPFEnableStringFunctions
がtrue
に設定されている場合、オプションでさまざまな文字列関数を定義します:
#len
#pos
#rpos
#sub
#count
#replace
#explode
#urldecode
解説は特設したサブページ、例えばManual:Performing string operations with parser functionsを参照してください。
![]() | 2013 年に、これらの機能は大規模に使用すると非効率であるため、Wikimedia Wiki では決して 有効にしないこと が決定されました (履歴についてはphab:T8455 を参照してください)。これらの機能はWikimedia wikiでは動作しません。 Wikimedia プロジェクトについて何かを書くためにここに来ているのであれば、何か他のものを探していることになります。ホーム Wiki に文字列関数がある場合は、おそらくLua が使用されています。 たとえば、英語版 Wikipedia ではModule:String が使用されていますが、これは構文が大きく異なりますが、同じことの一部を実行します。 個別の文字列処理テンプレートもあります。 |
Module:String 関数の簡単な概要は次のとおりです。
{{#invoke:String|len|target_string}}
{{#invoke:String|sub|target_string|start_index|end_index}}
{{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}}
{{#invoke:String|pos|target_string|index_value}}
{{#invoke:String|find|source_string|target_string|start_index|plain_flag}}
{{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}
{{#invoke:String|rep|source|count}}
{{#invoke:String|escapePattern|pattern_string}}
{{#invoke:String|count|source_str|pattern_string|plain_flag}}
{{#invoke:String|join|separator|string1|string2|...}}
パーサー関数のsubst展開は、ハッシュ記号の前にsubst:
を足します。
{{subst:#ifexist: Help:Extension:ParserFunctions/ja | [[Help:Extension:ParserFunctions/ja]] | Help:Extension:ParserFunctions/ja }}
→[[Help:Extension:ParserFunctions/ja]]
というページが存在するため、コード Help:Extension:ParserFunctions/ja がウィキテキストに挿入されます。![]() | 式に変数や他のパーサー関数などの「置換されていない」揮発性コードが含まれている場合、置換されたパーサー関数の結果は未定義になります。一貫した結果を得るには、評価される式内のすべての揮発性コードを置換する必要があります。Help:Substitution を参照してください。 |
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 equalthen 部分および else 部分での空白の除去を回避する方法はm:Template:If を参照してください。空白の代わりに <nowiki> </nowiki> を使用することもできます。
foo{{#if:|| bar}}foo
→foobarfoofoo{{#if:||<nowiki/>bar<nowiki/>}}foo
→foo bar fooただし連続する複数の空白文字はパーサにより1文字に圧縮されるため、この方法により処理できるのは1文字の空白文字に限定されます。
<spanstyle="white-space: pre;">foo{{#if:||<nowiki/> bar<nowiki/>}}foo</span> | → | foo bar foo |
このサンプルではwhite-space: pre
書式を採用してブラウザ上で非表示でも、空白スペースが保持されるように強制します。ソフトウェアにより、ブラウザに渡す前に空白文字が除去されるため発生します。
この挙動を回避するには、ソフトウェアによって置換されないように空白類を 
(改行可能空白) または
(改行不可空白、nbsp) に置換します。
<spanstyle="white-space: pre;">foo{{#if:||   bar   }}foo</span>
→foo bar foofoo{{#if:|| bar }}foo
→foo bar fooパラメータ同士の重みづけは同等でない点にご注意ください。パーサ関数 ParserFunctions では、冒頭と末尾の空白スペースは常に除去されます。テンプレートでは冒頭と末尾の空白スペースは名前付きパラメータと名前をつけた名無しパラメータに関しては除去、ただし名無しのままのパラメータからは除去しません :
"{{lc: AbC}}"
→ "abc"[1]"{{uc: AbC}}"
→ "ABC"[2]"{{lcfirst: AbC}}"
→ "abC"[3]"{{ucfirst: abc}}"
→ "Abc"[4]"{{urlencode: AbCdEf ghi}}"
次のように表示
"AbC%0AdEf+ghi"
そこで内部の新しい行は %0A に、内部の空白は + に変換されます。
{{anchorencode: AbC dEf ghi}}
次のように表示
AbC_dEf_ghi