Tools 是非官方社区Wiki。社区文档正在编写中,欢迎参与。 Wiki编辑答疑群:717421103
版本250722.2
全站通知:

帮助:解析函数/padleft

来自WIKI实验室WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

padleft是一个解析函数。帮助:解析函数页列出了所有解析函数的说明。

padleft

从左侧填充字符串。MediaWiki原生支持。

将指定字符串填充到原字符串的左侧,直到达到要求的长度。支持多字节字符(如中文)并确保安全处理Unicode。

也可用于从左侧截取字符串,或重复指定文本

语法

{{padleft: 原字符串 | 目标长度 | 填充字符串 }}

  • 原字符串:需要被填充的字符串
  • 目标长度:填充后的总字符数(最大500)
  • 填充字符串(可选):用于填充的字符串,默认为"0"

填充时会循环使用填充字符串直到达到目标长度。如果原字符串已长于目标长度,则不做任何处理。

示例

  • 默认填0 {{padleft: xyz | 5 }} → 00xyz
  • 中文填充 {{padleft: 啊哈 | 5 | 填充 }} → 填充填啊哈
  • 超长原文 {{padleft: 这个字符串太长了 | 5 | 填 }} → 这个字符串太长了
  • 截断填充 {{padleft: | 3 | abcde }} → abc
  • 重复输出 {{padleft: | {{#expr:{{#len: abc }} * 3 }} | abc }} → abcabcabc

更多示例

  • {{padleft: 啊哈 | 5 | 填<span>充</span> }} → 填<s啊哈 (允许的html标签可用)
  • {{padleft: 啊哈 | 17 | 填<span>充</span> }}<span></span>啊哈 → 填啊哈 (允许的html标签可用)
  • {{padleft: 啊哈 | 5 | 填<a>充</a> }} → 填填填啊哈 (解析器扩展标签会被移除)
  • {{padleft: 啊哈 | 1000 | 123456789- }} → 123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-12345678啊哈(最大处理长度为500)

底层代码

来自MediaWiki及其扩展的源代码,运行在服务端。此处仅供快速查阅,便于更充分的挖掘其"特性"。

// mediawiki-1.37.0\includes\parser\CoreParserFunctions.php
public static function padleft( $parser, $string = '', $length = 0, $padding = '0' ) {
	return self::pad( $parser, $string, $length, $padding, STR_PAD_LEFT );
}

/**
 * Unicode-safe str_pad with the restriction that $length is forced to be <= 500
 * @param Parser $parser
 * @param string $string
 * @param string $length
 * @param string $padding
 * @param int $direction
 * @return string
 */
public static function pad(
	$parser, $string, $length, $padding = '0', $direction = STR_PAD_RIGHT
) {
	$padding = $parser->killMarkers( $padding );
	$lengthOfPadding = mb_strlen( $padding );
	if ( $lengthOfPadding == 0 ) {
		return $string;
	}

	# The remaining length to add counts down to 0 as padding is added
	$length = min( (int)$length, 500 ) - mb_strlen( $string );
	if ( $length <= 0 ) {
		// Nothing to add
		return $string;
	}

	# $finalPadding is just $padding repeated enough times so that
	# mb_strlen( $string ) + mb_strlen( $finalPadding ) == $length
	$finalPadding = '';
	while ( $length > 0 ) {
		# If $length < $lengthofPadding, truncate $padding so we get the
		# exact length desired.
		$finalPadding .= mb_substr( $padding, 0, $length );
		$length -= $lengthOfPadding;
	}

	if ( $direction == STR_PAD_LEFT ) {
		return $finalPadding . $string;
	} else {
		return $string . $finalPadding;
	}
}
代码逻辑:
  • 清理 填充字符串 中的解析标记(Strip marker)
  • 检查 填充字符串 是否有效(非空)。无效直接返回原字符串
  • 检查 目标长度,限制最大值为500
  • 检查 要填充的字符串长度(目标长度 - 原字符串长度) ,小于0直接返回原字符串
  • 循环构建要填充的字符串,直到达到目标长度
    • 如果填充字符串长度不匹配需求,会截取部分内容
  • 拼接到原字符串左侧

实际用例

一些Wiki使用了相关特性,如下所示这个静态列表可能在下列页面更改后过时仅供批判性参考
碧蓝航线 - blhx

原神 - ys

崩坏:星穹铁道 - sr

代号鸢 - yuan

赛马娘 - umamusume

黑神话:悟空 - wukong

白荆回廊 - bjhl

公主连结 - pcr

无期迷途 - wqmt

孙美琪疑案 - sunmeiqi

交错战线 - crosscore

千年之旅 - elf

StardewValley星露谷物语 - stardewvalley

方舟指令 - fzzl

烟雨江湖 - yanyu

物华弥新 - whmx

超级机器人大战DD - srwdd

咸鱼之王 - xyzwgame

宝可梦大探险 - pq

新怪谈:秘密实验室 - scpsl

小森灵 - xsl0

苍雾残响 - hazereverb406

少前:云图计划 - 42lab

环行旅舍 - kelaiyinshe

突击莉莉终结之弹 - allb

ARGONAVIS - aaside

四叶草剧场 - clover

BangDream!少女乐团派对 - bangdream

美妙世界 - twewy

妃十三学园 - alterna

宇宙猜想 - yuzhou

云顶之弈 - tft

《逃离塔科夫》官方 Wiki(镜像) - eft