사용자:표리부동/작업장6
| 이 문서는 한국어 위키백과의 정보문입니다. 이 문서는 정책과 지침은 아니지만, 위키백과의 규범과 관습 측면에서 공동체의 확립된 관행을 설명하고 있습니다. 공동체의 총의나 검토를 어느 정도 반영하고 있습니다. |
- mw:ParserFunctions에서 더 자세한 정보를 얻을 수 있습니다.
미디어위키 확장 기능 중에는 간단한 계산과 조건문을 할 수 있는 함수가 있습니다.
함수
[편집]#expr
[편집]#expr은 간단한 계산을 할 수 있는 기능으로, 다음과 같이 사용합니다.
{{#expr: 계산식 }}
| 연산자 | 기능 | 예제 |
|---|---|---|
| - | {{#expr: 123456789012345}} = 1.2345678901234E+14 | |
| {{#expr: 0.000001}} = 1.0E-6 | ||
| ( ) | 괄호 | {{#expr: (30 + 7) * 7 }} = 259 |
| + | 양수 부호 | {{#expr: +30 * +7}} = 210 |
| - | 음수 부호 | {{#expr: -30 * -7}} = 210 |
| not | 부정문 | {{#expr: not 0 * 7}} = 7 {{#expr: not 30+7}} = 7 |
| * | 곱셈 | {{#expr: 30 * 7}} = 210 |
| / | 나눗셈 | {{#expr: 30 / 7}} = 4.2857142857143 |
| div | 나눗셈. /과 같음 | {{#expr: 30 div 7}} = 4.2857142857143 {{#expr: 5 div 2 * 2 + 5 mod 2}} = 6 |
| mod | 정수 나눗셈을 한 나머지를 구합니다.
주의: 다른 프로그래밍 언어와 작동 방식이 다릅니다. |
{{#expr: 30 mod 7}} = 2 {{#expr: -8 mod -3}} = -2 {{#expr: -8 mod +3}} = -2 {{#expr: 8 mod 2.7}} = 0 {{#expr: 8 mod 3.2}} = 2 {{#expr: 8.9 mod 3}} = 2 |
| + | 덧셈 | {{#expr: 30 + 7}} = 37 |
| - | 뺄셈 | {{#expr: 30 - 7}} = 23 |
| round | 반올림 계산을 합니다. | {{#expr: 30 / 7 round 3}} = 4.286 {{#expr: 30 / 7 round 0}} = 4 {{#expr: 3456 round -2}} = 3500 |
| = | 등호 | {{#expr: 30 = 7}} = 0 |
| <> | 부등호. 다를 경우에 true=1, 같을 경우에 false=0이 나옵니다. | {{#expr: 30 <> 7}} = 1 |
| != | 부등호. <>와 같습니다. | {{#expr: 1 != 0}} = 1 |
| < | 작다 | {{#expr: 30 < 7}} = 0 |
| > | 크다 | {{#expr: 30 > 7}} = 1 |
| <= | 작거나 같다 | {{#expr: 30 <= 7}} = 0 |
| >= | 크거나 같다 | {{#expr: 30 >= 7}} = 1 |
| and | Logical AND | {{#expr: 4<5 and 4 mod 2}} = 0 |
| or | Logical OR | {{#expr: 4<5 or 4 mod 2}} = 1 |
입력할 때에 0이 false, 나머지의 값이 true로 처리됩니다. 계산 결과로는 false가 0, true가 1로 나옵니다.
#if
[편집]#if는 조건문의 하나로, 다음과 같이 사용합니다.
{{#if: 조건 | 조건이 참이면 나올 문장 | 조건이 거짓이면 나올 문장}}
이때 조건 문자열이 비어 있지 않을 때 참, 비어 있을 때 거짓을 반환합니다. 거짓일때 나올 문장은 생략할 수 있습니다.
예를 들면 다음과 같은 조건문이 있을 때:
{{#if: {{{parameter|}}} | parameter는 {{{parameter}}}입니다. | parameter가 없습니다.}}
{{틀|parameter=aaa}}의 결과는 다음과 같습니다.
parameter는 aaa입니다.
{{틀}}의 결과는 다음과 같습니다.
parameter가 없습니다.
{{틀|parameter=}}의 결과는 다음과 같습니다.
parameter가 없습니다.
주의해야 할 점은, 이것은 기존의 {{{parameter|}}} 동작과 다릅니다. 다음의 두 작동을 비교해 보세요.
| {{{parameter|없음}}} | {{#if: {{{parameter|}}} | {{{parameter}}} | 없음}} | |
|---|---|---|
| {{틀|parameter=a}} | a | a |
| {{틀}} | 없음 | 없음 |
| {{틀|parameter=}} | 없음 |
또한, 조건이 참/거짓일 때 나오는 문장에는 자동으로 앞뒤로 빈 문자열이 삭제됩니다.
#ifeq
[편집]{{#ifeq: 문자열 1 | 문자열 2 | 같을 경우 | 다를 경우}}
- {{#ifeq: aa | aa | same | different}} -> same
문자열 부분에 숫자가 들어오면 숫자 값으로 검사합니다.
- {{ #ifeq: +07 | 007 | 1 | 0 }} -> 1
- {{ #ifeq: "+07" | "007" | 1 | 0 }} -> 0
매개변수가 정의되었는지를 #if로는 검사할 수 없습니다. 이를 검사하려면 #ifeq문을 사용해야 합니다.
- {{ #if: {{{x| }}}|not blank|blank}} = blank
- {{ #ifeq: {{{x| }}}| |blank|not blank}} = blank
- {{ #ifeq: {{{x| }}}|{{{x|u}}}|defined|undefined}} = undefined
#ifexist
[편집]{{#ifexist: 문서 이름 | 문서가 있을 경우 | 문서가 없을 경우}}
만약 문서 이름에 인터위키를 넣으면 결과는 항상 문서가 없는 경우로 나옵니다.
#ifexpr
[편집]{{#ifexpr: 계산식 | true일 경우 | false일 경우}}
계산식이 빈 문자열일 때도 false가 나옵니다.
- {{#ifexpr: {{ns:0}}|Toast|'''or else'''}} = or else
true, false 두 문장을 쓰지 않으면 아무 것도 출력되지 않습니다. 단, 오류가 있을 경우에는 오류 메시지가 출력됩니다. 이를 이용해서 수식에 오류가 있는지 없는지 확인하는 것도 가능합니다.
- {{#ifexpr: 1/0}} -> 0으로 나눴습니다.
- {{#if: {{#ifexpr: 1/0}} | 오류 있음 | 오류 없음}} -> 오류 있음
#ifanon, #ifblocked, #ifsysop
[편집]사용자의 여부와 관련된 특수 함수로 #ifanon은 익명 (IP 사용자)의 여부를 알려주며, #ifblocked는 차단 당했는지의 여부를, #ifsysop는 관리자의 여부를 알려줍이다.
{{#ifanon: 참 | 거짓}}
여기서 익명일 때에는 참을, 아닐 때에는 거짓을 출력합니다.
너가 익명인가? {{#ifanon:참|거짓}}
이 때 #ifanon 뿐만 아니라 #ifblocked와 #ifsysop도 사용법은 같습니다.
#ifingroup
[편집]#ifingroup은 소속된 사용자 권한 그룹의 여부를 알려줍니다.
{{#ifingroup: 그룹 | 구성원일 경우 | 구성원이 아닐 경우}}
이 때 그룹에는 autoconfirmed (자동 인증된 사용자), sysop (관리자), user (사용자), rollback (되돌리기 기능자)을 입력할 수 있습니다.
아래는 예제입니다.
너가 자동으로 인증된 사용자인가? {{#ifingroup:autoconfirmed|참|거짓}}
아래는 결과입니다.
너가 자동으로 인증된 사용자인가? {{#ifingroup:autoconfirmed|참|거짓}}
#switch
[편집]다른 프로그래밍 언어의 switch문과 비슷한 구조를 가지고 있습니다.
{{ #switch: 비교할 값
| <value1> = <result1>
| <value2> = <result2>
| ...
| <valuen> = <resultn>
| <default result>
}}
마지막 default값은 모든 비교가 실패했을 때의 값으로, 항상 있어야 합니다. 만약 default 값에 등호가 들어간다면, #default = <값>를 사용할 수 있습니다.
#time
[편집]{{ #time: 형식 }}
{{ #time: 형식 | 시간 }}
시간을 출력합니다.
| 코드 | 설명 | 예시 | 현재 |
|---|---|---|---|
| Y | 네 자리 연도 | 예: 2006 | 2025 |
| y | 두 자리 연도 | 00~99, 예: 06=2006. |
25 |
| L | 윤년일 경우 | 1이면 윤년, 0이면 평년 | 0 |
| n | 현재 달(앞에 0이 붙지 않음) | 1~12 | 11 |
| m | 현재 달(앞에 0이 붙음) | 01~12 | 11 |
| M | 줄인 달 이름 | 1~12 | 11 |
| F | 달 이름 | 1월~12월 | 11월 |
| t | 각 달에 있는 날짜 수 | 28~31 | 30 |
| j | 현재 날(앞에 0이 붙지 않음) | 1~31 | 15 |
| d | 현재 날(앞에 0이 붙음) | 01~31 | 15 |
| z | 그 해부터 지난 날수(0부터 시작함) | 0~364, 윤년일 경우 365까지 | 318 |
| D | 줄인 요일 이름 | 월~일 | 토 |
| l | 요일 이름 | 월요일~일요일 | 토요일 |
| w | 요일 숫자(미국식) | 0(일요일)~6(토요일) | 6 |
| N | 요일 숫자(ISO 8601 방식). | 1(월요일)~7(일요일) | 6 |
| W | ISO 8601 주 숫자(ISO 연도는 월요일부터 일요일까지 완전히 있어야 한 주로 치고, 첫 번째 주는 늘 1월 4일이나 역년 목요일을 포함한다.). | 1 to 52 or 53 (depends on year) | 46 |
| a | am(같은 날 01:00:00부터 12:59:59까지)이나 pm을 소문자로 나타낸다(시간 단위를 12시간제로 표시할 때 쓴다.). | am이나 pm | am |
| A | 위 a와 같지만, 대문자로 나타낸다. | AM이나 PM | AM |
| g | 시간을 12시간 단위로 표기하되, 앞에 0을 붙이지 않음(1, 2자리이고 am/pm 또는 AM/PM과 같이 쓴다.). | 1~12 | 11 |
| h | 시간을 12시간 단위로 표기하되, 앞에 0을 붙임(2자리이고 am/pm 또는 AM/PM과 같이 쓴다.). | 01~12 | 11 |
| G | 시간을 24시간 단위로 표기하되, 앞에 0을 붙이지 않음(1자리 또는 2자리). | 0~23 | 11 |
| H | 시간을 24시간 단위로 표기하되, 앞에 0을 붙임(2자리). | 00~23 | 11 |
| i | 분(2자리). | 00~59 | 57 |
| s | 초(2자리). | 00~59 | 36 |
| U | 1970년 1월 1일 00:00:00 UTC부터 흐른 초 수. | 0~2147483647 | 1763207856 |
| c | ISO 8601 형식을 따른 날짜로, {{#time:Y-m-dTH:m:s{{#time:+H:m|+0 hours}}}}와 같다. | fixed length string | 2025-11-15T11:57:36+00:00 |
| r | RFC 2822 형식을 따른 날짜로, {{#time:D, j M Y H:m:s {{#time:+H:m|+0 hours}}}}와 같다. | variable length string | Sat, 15 Nov 2025 11:57:36 +0000 |
예제
[편집]- {{ #time:
Y년 M월 j일 l | 20070304}} → "2007년 3월 4일 일요일" - {{ #time:
Y년 M월 j일 l | 2007-3-4}} → "2007년 3월 4일 일요일" - {{ #time:
Y년 M월 j일 l | 4 March 2007}} → "2007년 3월 4일 일요일" - {{ #time:
Y년 M월 j일 l | -32 days}} → "2025년 10월 14일 화요일" (32일 전) - {{ #time:
H:i | +9 hours}} → "20:57" (UTC보다 9시간 빠름) - {{ #time:
H:i | 8:15 +9 hours}} → "17:15" - {{ #time:
Y/m | -17 months}} → "2024/06" (17개월 전) - {{ #time:
[[Y년]] [[M월 j일]] l | 4 March 2007}} → "2007년 3월 4일 일요일"
범위
[편집]1970년 1월 1일 00:00:01 (UTC) 이후, 2038년 1월 19일 03:14:07 이전의 날짜만 표시할 수 있습니다. (2038년 문제 참고)
인수로서 1901년과 1970년 사이의 날짜가 주어지면 잘못된 날짜를 출력하며, 그 이전의 날짜가 주어지면 오류 메시지가 나옵니다.
2월 29일
[편집]- {{ #time:
j|February 29 2006}} → 1 - {{ #time:
j|February 29 2008}} → 29
#rel2abs
[편집]상대 주소를 절대 주소로 바꿔줍니다.
- “도움말:가나/다라”에서 {{ #rel2abs:
../마바}}를 호출한 경우, 결과는 도움말:가나/마바가 됩니다. - “도움말:가나”에서 {{ #rel2abs:
../마바}}를 호출한 경우, 결과는 마바가 됩니다. - “도움말:가나”에서 {{ #rel2abs:
../../마바}}를 호출한 경우, 아래와 같은 오류 메시지가 출력됩니다.- 오류: 경로 구조가 잘못되었습니다: "도움말:가나/../../마바" (루트 노드 위의 노드에 접속을 시도했습니다)
- {{ #rel2abs:
../마바 | 도움말:가나/다라}}를 호출한 경우, 결과는 도움말:가나/마바가 됩니다. - {{ #rel2abs:
도움말:가나/다라/../마바}}를 호출한 경우, 결과는 도움말:가나/마바가 됩니다.
#language
[편집]해당 언어 코드에 맞는 언어명을 출력합니다.
- {{ #language:
ko}} → 한국어 - {{ #language:
vi}} → Tiếng Việt - {{ #language:
zh-min-nan}} → 閩南語 / Bân-lâm-gí
#var , #vardefine
[편집]#var 과 #vardefine은 변수를 지정하고 사용할 수 있는 함수로 다음과 같이 사용합니다.
{{#vardefine: 변수이름 | 변수값 }}
{{#var: 변수이름 }}
이렇게 사용할 수 있습니다.
{{#vardefine:sky|blue}}
Sky is {{#var:sky}}
아래는 결과값입니다.
{{#vardefine:sky|blue}}
Sky is {{#var:sky}}
#sub
[편집]#sub는 문자열을 한글과 영어,일본어 상관없이 자를수 있는 함수로 다음과 같이 사용합니다.
{{#sub: 자를문자열 | 숫자1 | 숫자2 }}
자를문자열의 숫자1번째부터 시작해서 숫자2만큼 잘라서 뽑아와줍니다. 아래는 예제입니다.
{{#sub:sky dum dummy dummss|0|3}} is blue
아래는 결과값입니다.
{{#sub:sky dum dummy dummss|0|3}} is blue
#len
[편집]#len는 문자열의 개수를 새어주는 함수로 다음과 같이 사용합니다.
{{#len: 문자열 }}
아래는 예제입니다.
"Nu is babo"의 길이는 {{#len:Nu is babo}}입니다.
아래는 결과값입니다.
"Nu is babo"의 길이는 {{#len:Nu is babo}}입니다.
#pos
[편집]#pos는 문자열에 어떤 문자를 찾아서 맨처음으로 찾아진 문자가 어디에 위치해 있는지 확인해주는 함수로 다음과 같이 사용합니다.
{{#pos: 문자열 | 찾을 문자 }}
아래는 예제입니다.
"Nu와 GNU가 싸우면 GNU가 이긴다. 왜냐하면 GNU가 이름이 제일 길기 때문이다."에 "GNU"의 위치는 {{#pos:Nu와 GNU가 싸우면 GNU가 이긴다.|GNU}}입니다.
아래는 결과값입니다.
"Nu와 GNU가 싸우면 GNU가 이긴다. 왜냐하면 GNU가 이름이 제일 길기 때문이다."에 "GNU"의 위치는 {{#pos:Nu와 GNU가 싸우면 GNU가 이긴다. 왜냐하면 GNU가 이름이 제일 길기 때문이다.|GNU}}입니다.
#rpos
[편집]#rpos는 문자열에 어떤 문자를 찾아서 마지막으로 찾아진 문자가 어디에 위치해 있는지 확인해주는 함수로 다음과 같이 사용합니다.
{{#rpos: 문자열 | 찾을 문자 }}
아래는 예제입니다.
"Nu와 GNU가 싸우면 GNU가 이긴다. 왜냐하면 GNU가 이름이 제일 길기 때문이다."에 "GNU"의 위치는 {{#rpos:Nu와 GNU가 싸우면 GNU가 이긴다. 왜냐하면 GNU가 이름이 제일 길기 때문이다.|GNU}}입니다.
아래는 결과값입니다.
"Nu와 GNU가 싸우면 GNU가 이긴다. 왜냐하면 GNU가 이름이 제일 길기 때문이다."에 "GNU"의 위치는 {{#rpos:Nu와 GNU가 싸우면 GNU가 이긴다. 왜냐하면 GNU가 이름이 제일 길기 때문이다.|GNU}}입니다.
#replace
[편집]#replace는 문자열에서 특정 단어를 찾아서 다른 단어로 치환해주는 함수로 다음과 같이 사용합니다.
{{#replace:문자열|특정 단어|다른단어}}
아래는 예제입니다.
"Nu는 바보다" 에서 Nu를 GNU로 바꾸면 "{{#replace:Nu는 바보다|Nu|GNU}}"입니다.
아래는 결과값입니다.
"Nu는 바보다" 에서 Nu를 GNU로 바꾸면 "{{#replace:Nu는 바보다|Nu|GNU}}"입니다.
#explode
[편집]#explode는 문자열에서 특정 단어로 잘라서 n번째로 위치하는 문자를 뽑아주는 함수로 다음과 같이 사용합니다.
{{#explode:문자열|특정 단어|n}}
아래는 예제입니다.
"사유리는 바보다" 에서 " "로 잘라서 1번째로 위치하는 것은 "{{#explode:사유리는 바보다| |1}}"입니다.
아래는 결과값입니다.
"사유리는 바보다" 에서 " "로 잘라서 1번째로 위치하는 것은 "{{#explode:사유리는 바보다| |1}}"입니다.
#username
[편집]자신의 닉네임을 출력해 주는 기능을 가지고 있습니다. 특수함수를 치기가 귀찮으시면
틀을 사용해 주세요.
변수에다가 문자열을 입력하면 로그인 하지 않았을 경우에 작성한 문자열이 표시됩니다.
| 예제 | 당신의 닉네임은 {{#username:너}}입니다. |
|---|---|
| 결과 | 당신의 닉네임은 {{#username:}}입니다. |
#ip
[편집]자신의 아이피를 출력해 주는 기능을 가지고 있습니다. 특수함수를 치기가 귀찮으시면 USERIP틀을 사용해 주세요.
| 예제 | {{USERNAME}}의 IP는 {{#ip:}}입니다. |
|---|---|
| 결과 | 틀:USERNAME의 IP는 {{#ip:}}입니다. |
#rand
[편집]임의의 숫자를 출력해주는 기능을 갖고 있습니다. {{#rand:a|b}}로 입력하시면 a에서 b사이에 있는 임의의 정수를 출력합니다.
| 예제 | {{#rand:1|100}} |
|---|---|
| 결과 | 100}} |
#titleparts
[편집]- titleparts는 페이지 제목을 조금 더 정교하게 자르기 위한 것입니다. Magic Words 중 하나인 {{PAGENAME}}류와 함께 쓰면 더욱 효과적입니다.
{{#titleparts: 페이지명 | 반환할 구역 수 | 반환할 첫번째 구역 }}
구역이라는 것은 상위/하위 문서 하나 단위를 의미합니다. 예제를 보갰습니다.
{{#titleparts: 백괴책:낚시학개론/둘째낚시/셋째낚시/넷째낚시방/마지막이다|2}}
이와 같이 하면 다음과 같이 출력됩니다. 두번째 변수가 없으면 처음부터 앞에 쓴 숫자만큼 잘라버립니다.
백괴책:낚시학개론/둘째낚시
다른 예제를 보겠습니다.
- {{#titleparts: 백괴책:낚시학개론/둘째낚시/셋째낚시/넷째낚시방/마지막이다|3|2}}
이는 3개만큼 자르되 2번째 칸부터 시작한다는 뜻입니다. 첫번째 변수(빨간 글씨)를 생략할 시는 기본값이 1로 지정됩니다. 따라서 결과는 다음과 같습니다.
둘째낚시/셋째낚시/넷째낚시방
#titleparts는 음수도 가능합니다.
{{#titleparts: 백괴책:낚시학개론/둘째낚시/셋째낚시/넷째낚시방/마지막이다|-1}}
음수의 경우 뒤쪽부터 셉니다. 따라서 이렇게 입력하였을 때의 결과는 백괴책:낚시학개론/둘째낚시/셋째낚시/넷째낚시방이 됩니다. 같은 원리로, 첫째 변수가 아닌 둘째 변수가 -1일 시에는 마지막이다가 나옵니다.
주의 사항
[편집]일반적인 틀과 작동 방식이 다르다는 것을 주의해야 합니다. 예를 들어서, 이 함수들은 자동적으로 매개변수의 앞뒤 공백을 삭제하고, 이로 인해 원하는 결과와 다른 결과가 나올 수 있습니다.
만약 표에서 새로운 칸 하나를 만들어 주는 틀의 내용이 다음과 같다고 할 때:
|- | 칸
이 틀을 다음과 같이 사용할 수 있습니다.
{|
{{틀}}
{{틀}}
{{틀}}
{{틀}}
|}
이때 결과는 다음과 같습니다.
| 칸 |
| 칸 |
| 칸 |
| 칸 |
이때 두번째와 세번째에 #if 구문을 사용한다면:
{|
{{틀}}
{{#if:조건|{{틀}}}}
{{#if:조건|{{틀}}}}
{{틀}}
|}
이 되고, 이때 조건이 모두 참이면 앞과 같은 결과가 나옵니다. 하지만 조건이 모두 거짓이면 다음과 같이 됩니다.
{|
{{틀}}
{{틀}}
|}
결과는 다음과 같습니다.
| 칸
|
| 칸 |
따라서 표의 모양이 망가지게 됩니다.
이 문제를 해결하는 방법은 몇 가지가 있습니다.
- <nowiki/>나 {{ns:0}}과 같이 ‘빈 문자열’을 나타내는 문법으로 문자열의 앞뒤를 정해 줄 수 있습니다. 다만 표에서는 첫 글자에 |가 와야 의미를 가지기 때문에 사용할 수 없습니다.
- html 태그를 직접 쓰면 공백에 상관없이 표 문법을 구현할 수 있습니다. 다만 다소 불편합니다.
- 표 문법의 경우 ‘|-’를 중복해서 쓸 수 있기 때문에 문제를 회피할 방법이 있습니다. 틀:생물 분류를 참고하십시오.