上一节我们自己动手打造了判断全小写的StrIsLower()
函数。有小写就有大写,今天我们就来完成它的姊妹篇:创建一个能精准判断字符串是否全大写的StrIsUpper()
函数。
这在校验某些固定大写的品种代码(如外汇USDJPY
)或处理特定格式的数据时,同样非常有用。
自定义判断全大写的StrIsUpper()
函数
它的实现思路和StrIsLower()
如出一辙,同样是通过一个巧妙的组合逻辑来同时解决两个问题:第一,如何判断字符串本身就是大写的?第二,如何排除那些根本不含字母的字符串?
StrIsUpper(string source) =>
// 步骤1: 准备一个全大写的版本
sourceUpper = str.upper(source)
// 步骤2
// 条件A: sourceUpper != str.lower(source)
// 条件B: source == sourceUpper
sourceUpper != str.lower(source) and source == sourceUpper
这个逻辑和StrIsLower()
完全对应:先用条件A确保我们处理的是一个含有字母的字符串,然后用条件B检查这个字符串是不是天生就是全大写的。这样就能做到精准判断。
这个函数的使用示例及其结果如下:
注意:当StrIsUpper()
返回false
时,并不一定意味着字符串是全小写,它也可能是混合大小写、只包含数字/符号,或者是空字符串。如果给StrIsUpper()
传递na
值或空字符串""
,函数总是返回false
。
实战案例
下面的指标脚本演示了如何在实际应用中使用StrIsUpper()
函数。它会检查当前交易品种的描述信息是否完全由大写字母组成,并在图表的最后一个K线上通过标签显示结果。
//@version=6
indicator(title="判断字符串是否全大写", overlay=true)
StrIsUpper(string source) =>
sourceUpper = str.upper(source)
sourceUpper != str.lower(source) and source == sourceUpper
// 1. 调用函数
isDescriptionUpper = StrIsUpper(syminfo.description)
// 2. 显示检查结果
if barstate.islast
label.new(bar_index, high,
text="交易品种描述:\n" + syminfo.description +
"\n\n是否全为大写?\n" + str.tostring(isDescriptionUpper),
style=label.style_label_left, color=color.black, textcolor=color.white)
在图表上,该标签会告知用户当前品种的描述信息以及它是否完全由大写字母构成。例如,对于GBP/USD图表,StrIsUpper()
会根据描述信息来返回对应的值。
总结
总结一下,StrIsUpper()
函数是我们上一节课StrIsLower()
的完美镜像,通过它我们补全了PineScript在大小写格式校验方面的功能。如果字符串中所有英文字母均为大写,则函数返回true,
如果字符串中包含任何小写字母,或者不包含任何英文字母,则函数返回false
。现在你的工具箱里不仅有能统一大小写的str.lower()
和str.upper()
,还有了能判断大小写格式的StrIsLower()
和StrIsUpper()
。灵活运用这些自定义工具,你就能对文本数据进行更精细、更可靠的处理。