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

帮助:解析函数/padright

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

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

padright

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

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

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

与padright相同,只是填充方向相反,当原字符串为空时,这两个函数的行为一致。

语法

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

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

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

示例

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

更多示例

  • {{padright: 啊哈 | 5 | 填<span>充</span> }} → 啊哈填<s (允许的html标签可用)
  • {{padright: 啊哈 | 17 | 填<span>充</span> }}啊哈填<span></span> → 啊哈填 (允许的html标签可用)
  • {{padright: 啊哈 | 5 | 填<a>充</a> }} → 啊哈填填填 (解析器扩展标签会被移除)
  • {{padright: 啊哈 | 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 padright( $parser, $string = '', $length = 0, $padding = '0' ) {
	return self::pad( $parser, $string, $length, $padding );
}

/**
 * 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使用了相关特性,如下所示这个静态列表可能在下列页面更改后过时仅供批判性参考