You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake存储过程正则特殊字符失效问题求助

问题解决:Snowflake JS存储过程中RLIKE正则匹配失效

问题描述

验证手机号是否符合(XXX) XXX-XXXX格式时,单独执行以下SQL语句能正常返回TRUE:

select RLIKE(  '(800) 456-7891', '\\([0-9]{3}\\) [0-9]{3}-[0-9]{4}');

但将该逻辑写入Snowflake JavaScript存储过程后,执行生成的表中FLAG字段始终为FALSE,特殊字符(未被正确识别,添加单个额外反斜杠也无效。

原因分析

JavaScript的模板字符串(用反引号`包裹)会对反斜杠进行一次转义处理。原存储过程中的\\(会被JS解析为\(,传到Snowflake执行时,正则表达式里的(就失去了转义效果,变成了正则的分组符号而非普通字符,导致匹配失败。

解决方法

需要对正则中的反斜杠进行双重转义,也就是使用四个反斜杠\\\\来表示正则里的一个转义反斜杠。修改后的存储过程代码如下:

CREATE OR REPLACE PROCEDURE "SP_TEST"()
RETURNS VARCHAR(16777216)
LANGUAGE JAVASCRIPT
EXECUTE AS OWNER
AS $$
var create_cmd_0 = `
CREATE OR REPLACE TABLE  QA_TEST_SP_DEBUG
AS 
select '(800) 456-7891' AS PHONE_NUMBER,  RLIKE('(800) 456-7891','\\\\([0-9]{3}\\\\) [0-9]{3}-[0-9]{4}') AS FLAG   
;`
var sql_create_0 = snowflake.createStatement({sqlText: create_cmd_0});
var create_result_0 = sql_create_0.execute();   
return 'SUCCESS';
  $$
  ;

执行修改后的存储过程后,查询QA_TEST_SP_DEBUG表,FLAG字段会正确返回TRUE。

内容的提问来源于stack exchange,提问作者N R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 00:47:36