Documentation

With this template #ifexpr can be used in a way such that it does not strip spaces and newlines from the "then" and "else" part.

Usage

  • {{ifexpr|2<3| p | q }} gives " p "
  • {{ifexpr|2>3| p | q }} gives " q "
  • {{ifexpr|2{{=}}3| p | q }} gives "

ERROR: invalid parameters for Template:Ifexpr:
  {{Ifexpr...|2Template:=3| p | q }}
  Check for invalid numbers, or parameter 1 must be empty when using "1=" format.
"

  • {{ifexpr||1=2=3| p | q }} gives " q "
  • {{ifexpr||1=7=7| ok true | no }} gives " ok true "
  • {{ifexpr||1=3*4<=10+1| ok| oh no}} gives " oh no"

Compare:

  • {{#ifexpr:2<3| p | q }} gives "p"

Note that, unlike parser functions, templates require writing equals signs in values of unnamed parameters by using double-braces, as {{=}}. So, to allow "=" (or "<=" or ">=") then use the named parameter 1, as in: 1={{{x}}}>=7.

For full substitution, simply use subst: or safesubst:. If the condition contains a parser function, template, or variable, that should be substituted too. Optionally the "then" or "else" part can also be substituted.

Error messages (examples):

  • {{ifexpr|1234>e3|1|0}} gives

ERROR: invalid parameters for Template:Ifexpr:
  {{Ifexpr...|1234>e3|1|0}}
  Check for invalid numbers, or parameter 1 must be empty when using "1=" format.

  • {{#ifexpr:1234>e3|1|0}} gives Expression error: Unexpected number., for e3.
  • {{#ifexpr:1234>1e3|1|0}} gives 1, because 1,234 > 1e3 (1,000).

Expansion depth limit

13 levels allowed:

{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|a}}}}}}}}}}}}}}}}}}}}}}}}}} gives
ERROR: invalid parameters for Template:Ifexpr:
  {{Ifexpr...|1|{{Expansion depth limit exceeded|1|{{Expansion depth limit exceeded|1|{{Expansion depth limit exceeded|1|a}}}}}}|}}
  Check for invalid numbers, or parameter 1 must be empty when using "1=" format.

{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|a}}}}}}}}}}}}}}}}}}}}}}}}}}}} gives
ERROR: invalid parameters for Template:Ifexpr:
  {{Ifexpr...|1|{{Expansion depth limit exceeded|1|{{Expansion depth limit exceeded|1|{{Expansion depth limit exceeded|1|{{Expansion depth limit exceeded|1|a}}}}}}}}|}}
  Check for invalid numbers, or parameter 1 must be empty when using "1=" format.

Internal technical details

For evaluating the condition the template uses the actual parser functions; however, not directly with p and q, because this strips spaces and newlines from them, but with index values 1 and 2. The result can be 1, 2, or an error message. Using a switch these are converted to p1, p2, and if/errmsg, respectively. The template with the applicable name is called (Template:P1, Template:P2, or Template:If/errmsg), with as parameters p, q, and {{{1}}}. Templates p1 and p2 ignore {{{1}}}; template if/errmsg is only called in the case of a wrong expression {{{1}}}; it ignores p and q and uses {{{1}}} for display in the error message.

See also

Template:Refs