在网站运营中,我们经常会遇到需要处理各种长字符串ID的情况,例如商品SKU、订单号、用户ID等。这些ID字符串通常包含多段信息,而我们可能只需要其中一部分数字用于页面的展示、报表的统计,或是进行一些业务逻辑的判断。安企CMS(AnQiCMS)强大的模板引擎为我们提供了灵活的工具,能够轻松应对这类需求。

安企CMS 模板中的字符串处理利器:过滤器

AnQiCMS 的模板引擎内置了丰富的“过滤器”(Filters),它们就像一个个小工具,可以对模板中的变量进行各种处理,包括字符串的截取、格式化、转换等。要提取长ID字符串中的部分数字,我们将主要依赖这些过滤器。

核心策略一:精准截取,提取所需数字 (slice 过滤器)

slice 过滤器是处理长字符串最直接有效的方法。它允许您根据起始和结束位置来截取字符串中的任意一部分。

工作原理: slice 过滤器通过 obj|slice:"start:end" 的形式来使用。

  • obj:表示您要操作的那个长ID字符串变量。
  • "start:end":指定截取的范围。start 是起始索引(从0开始计数),end 是结束索引(不包含该位置的字符)。

实用场景示例: 假设您的订单ID字符串是 ORDER-20231026-VIP12345-001,其中:

  • ORDER- 是固定前缀
  • 20231026 是日期
  • VIP12345 是会员代码
  • 001 是订单流水号

1. 提取订单流水号 “001”: 流水号“001”位于整个字符串的最后三位。我们可以从特定的索引位置开始截取。 要提取 001,它在 ORDER-20231026-VIP12345-001 中的起始索引是 25(’0’的位置),结束索引是 28(不包含,即字符串的末尾)。

{% set order_id = "ORDER-20231026-VIP12345-001" %}
{% set serial_number = order_id|slice:"25:28" %}
<div>订单流水号:{{ serial_number }}</div>

输出:订单流水号:001

2. 提取会员代码 “12345”: 会员代码 “VIP12345” 位于字符串的中间部分。我们可以先截取包含”VIP”的部分,再处理。 要提取 12345,它在 ORDER-20231026-VIP12345-001 中的起始索引是 19(’V’的位置),结束索引是 25(’5’的下一个位置)。

{% set order_id = "ORDER-20231026-VIP12345-001" %}
{% set vip_code_with_prefix = order_id|slice:"19:25" %} {# 截取 "VIP12345" #}
{% set vip_number_part = vip_code_with_prefix|slice:"3:" %} {# 从 "VIP" 后面开始截取 "12345" #}
<div>会员编号:{{ vip_number_part }}</div>

输出:会员编号:12345

  • 小贴士: slice 过滤器非常灵活,startend 都可以省略。例如,obj|slice:"5:" 会从索引5开始截取到字符串末尾;obj|slice:":10" 会从开头截取到索引9。

核心策略二:提取后的数字:用于显示与逻辑判断

一旦您通过 slice 过滤器成功提取到了所需的数字部分,接下来就可以将其用于显示或进行逻辑判断。

1. 用于显示: 直接在模板中输出变量即可。

{% set order_id = "ORDER-20231026-VIP12345-001" %}
{% set serial_number = order_id|slice:"25:28" %}
<p>您的订单号是:{{ order_id }},流水号为:<span style="font-weight: bold;">{{ serial_number }}</span></p>

输出:您的订单号是:ORDER-20231026-VIP12345-001,流水号为:001

2. 用于逻辑判断: 如果需要将提取到的数字进行数值比较(例如判断大小),首先需要使用 integer 过滤器将其从字符串转换为整数。安企CMS的模板引擎支持基本的逻辑判断标签