首页 n8n教程 n8n If节点入门:条件逻辑判断与正则包含匹配(附:数值大小比较实战)

n8n If节点入门:条件逻辑判断与正则包含匹配(附:数值大小比较实战)

作者: Dr.n8n 更新时间:2025-12-18 19:00:41 分类:n8n教程

“订单金额超过500才发VIP短信”——你的自动化流程卡在这一步了吗?

上周一位做跨境电商的朋友找我救急:他的n8n工作流明明接收到订单数据了,却总在“判断是否发VIP短信”这一步失败。打开流程一看——他在If节点里写的是data.amount > 500,但实际传入的是字符串"599.00"。这种“类型陷阱”,是90%初学者踩的第一个坑。

Dr. n8n 提醒:If节点不是万能翻译器。它需要你明确告诉它:“比较什么、怎么比、和谁比”。就像教小孩认颜色,你不能只说“选红色的”,而要说“选那个像苹果一样的红球”。

三分钟搞懂If节点的核心逻辑:条件=左值+运算符+右值

无论你用正则匹配、数值比较还是布尔判断,所有条件都逃不开这个铁三角:

  • 左值(Value 1):通常是来自上一个节点的数据,比如{{ $json.order_total }}
  • 运算符(Operator):等于、大于、包含、正则匹配等
  • 右值(Value 2):你设定的基准值,比如数字500或正则表达式/VIP/

我在帮某母婴品牌搭建“高客单价自动赠品系统”时发现:最常出错的不是逻辑本身,而是数据类型不匹配。比如从Shopify传来的价格字段默认是字符串,直接和数字比较必然失败。

实战一:用“正则包含”精准捕获关键词(客服工单分类场景)

假设你有个客服工单系统,想自动把包含“退款”、“退货”、“不满意”的工单标记为“紧急”。传统做法是写三个独立条件,但用正则可以一行搞定:

Value 1: {{ $json.ticket_content }}
Operator: Matches Regex
Value 2: /(退款|退货|不满意)/

这里的小括号加竖线(A|B|C)就是“或”逻辑,相当于同时匹配三个关键词。测试时建议先用.*退款.*这种宽松模式,再逐步收紧规则。

实战二:数值大小比较必须做的“类型转换”手术

回到开头的电商案例,正确的做法是在比较前强制转成数字:

Value 1: {{ parseFloat($json.amount) }}
Operator: Larger Than
Value 2: 500

更优雅的方式是用Function节点预处理:

// 在If节点前插入Function节点
return {
  ...$input.item.json,
  amount_num: parseFloat($input.item.json.amount)
};

然后在If节点直接比较{{ $json.amount_num }} > 500。这样后续所有节点都能复用这个干净的数字字段。

避坑指南:这三个隐藏雷区90%的人会中招

  1. 空值爆炸:当$json.price不存在时,parseFloat(undefined)会返回NaN,导致条件永远不成立。解决方案:{{ $json.price ? parseFloat($json.price) : 0 }}
  2. 小数精度:JavaScript的浮点数计算有精度问题,比较金额时建议先乘以100转成分单位:parseInt($json.amount * 100) > 50000
  3. 正则贪婪匹配:用.*error.*可能匹配到超长文本影响性能,改用berrorb(单词边界)更安全

终极心法:把If节点想象成“智能分拣机器人”

仓库里的分拣机器人不会自己猜包裹该去哪——它需要清晰的条形码(左值)、扫描规则(运算符)、目的地编码(右值)。当你觉得条件不生效时,不妨问自己:

  • 机器人拿到的是不是脏数据?(检查上游节点输出)
  • 扫描枪设置对焦距了吗?(确认运算符选择正确)
  • 目的地编码贴歪了没?(验证右值格式)

现在轮到你了!你在If节点踩过什么奇葩的坑?或者有什么骚操作?评论区留下你的故事——点赞最高的三位,我会用你的案例做一期深度拆解视频!