在处理文本数据时,有时我们需要进行一种格式校验:判断一个字符串是否“纯粹”,比如,是不是所有的字母都符合小写规范。这在需要统一数据格式或验证用户输入时非常有用。
PineScript本身没有提供现成的函数来做这个检查,但这难不倒我们。今天,我们就继续自己动手,打造一个能精准判断字符串是否“全小写”的工具函数。
自定义判断全小写的StrIsLower()
函数
要实现这个功能,我们需要解决两个问题:第一,如何判断字符串本身就是小写的?第二,如何排除那些根本不含字母的字符串(比如123
)?
下面这个自定义函数用一个非常巧妙的组合逻辑解决了这两个问题:
StrIsLower(string source) =>
// 步骤1: 准备一个全小写的版本
sourceLower = str.lower(source)
// 步骤2: 核心判断逻辑,
sourceLower != str.upper(source) and source == sourceLower
简单来说,这个函数在做两件事:首先用条件A确保我们处理的是一个正经的、含有字母的字符串,然后用条件B检查这个字符串是不是“天生”就是全小写的。只有两个条件都通过,我们才能认定这个字符串是全小写的。
这个函数的使用示例及其结果如下:
注意事项
- 当
StrIsLower()
返回false
时,并不一定意味着字符串是全大写,它也可能是混合大小写、只包含数字/符号,或者是空字符串。 - 如果给
StrIsLower()
传递na
值或空字符串""
,函数总是返回false
,因为这些情况不被视作包含小写字母的文本。
案例:检查品种描述的文本格式
下面的指标脚本演示了如何在实际应用中使用StrIsLower()
函数。它会检查当前图表交易品种的描述信息是否完全由小写字母组成,并在图表的最后一个K线上通过标签显示结果。
//@version=6
indicator(title="判断字符串是否全小写", overlay=true)
//判断是否都是小写
StrIsLower(string source) =>
sourceLower = str.lower(source)
sourceLower != str.upper(source) and source == sourceLower
// 1. 调用我们自己的函数,检查品种描述的“格式”
isDescriptionLower = StrIsLower(syminfo.description)
// 2. 在图表末尾绘制一个标签,显示检查结果
if barstate.islast
label.new(bar_index, high,
text="交易品种描述:\n" + syminfo.description +
"\n\n是否全为小写?\n" + str.tostring(isDescriptionLower),
style=label.style_label_left, color=color.teal, textcolor=color.white)
在图表上,该标签会告知用户当前品种的描述信息以及它是否完全由小写字母构成。例如,如果品种描述为 “SILVER(白银)”,StrIsLower()
会返回false
,标签中也会如实显示。
核心要点
总结一下,通过str.lower()
和str.upper()
的组合,我们创造了一个能精确判断字符串是否全小写的自定义函数StrIsLower()
。它最巧妙的地方在于,不仅判断了大小写,还顺便排除了不含字母的无效情况。如果字符串中所有英文字母均为小写,则函数返回true
;如果字符串中包含任何大写字母,或者字符串中不包含任何英文字母(例如,仅有数字、符号或为空),则函数返回false
。这个例子再次告诉我们,通过组合基础函数,我们可以构建出满足各种特定数据校验需求的强大工具。
评论前必须登录!
立即登录 注册