判断getROL_ID是否以整数开头的if语句逻辑异常排查
问题分析与修复
需求:当getROL_ID的值以整数开头时,将属性pAPIcall_Filter设置为true,否则设为false。
现有代码逻辑判断错误,导致输入KANEJ2(不以整数开头)和573871(以整数开头)时,pAPIcall_Filter的结果不符合预期。
错误原因
String.search()方法的返回规则:
- 匹配成功时,返回匹配字符串的起始索引(若匹配开头的整数,索引为
0) - 匹配失败时,返回
-1
在JavaScript中,0会被判定为假值,-1会被判定为真值。原代码的if (getROL_ID.search(/^\d/))判断逻辑与需求完全颠倒:
- 输入
573871(以整数开头)时,search返回0,条件为假,进入else分支将pAPIcall_Filter设为false,违背需求 - 输入
KANEJ2(不以整数开头)时,search返回-1,条件为真,进入if分支将pAPIcall_Filter设为true,也违背需求
修复方案
推荐使用RegExp.test()方法,它直接返回布尔值,逻辑更直观清晰:
if (/^\d/.test(getROL_ID)) { log.debug("Starts with an integer "); next.setProperty('pAPIcall_Filter', true); } else { log.debug("Does not start with an integer "); next.setProperty('pAPIcall_Filter', false); }
如果需要保留search()方法,需明确判断返回值是否为0(表示匹配到开头的整数):
if (getROL_ID.search(/^\d/) === 0) { log.debug("Starts with an integer "); next.setProperty('pAPIcall_Filter', true); } else { log.debug("Does not start with an integer "); next.setProperty('pAPIcall_Filter', false); }
修改后:
- 输入
573871时,匹配成功,pAPIcall_Filter设为true - 输入
KANEJ2时,匹配失败,pAPIcall_Filter设为false,完全符合需求。
内容的提问来源于stack exchange,提问作者lorenc27
相关产品推荐
相关产品推荐

