导语:在开发过程中经常会出现对于数字类型的判断,SAP有两种方法可以判断数字,一种是正则表达式,一种是标准函数【NUMERIC_CHECK】,两者输出的结果并不完全一致。
值类型 | 示例 | 正则表达式 | NUMERIC_CHECK |
---|---|---|---|
文本 | 啦啦啦 | ❌ | ❌ |
纯数字 | 123456 | ✅ | ✅ |
小数 | 123.456 | ✅ | ❌ |
标准函数认为小数字符算CHAR类型,可能是中间有小数点导致的吧。
测试代码
**&---------------------------------------------------------------------*
**& Report Z_JYH_TEST
**&---------------------------------------------------------------------*
**&
**&---------------------------------------------------------------------*
REPORT z_jyh_test.
DATA : gv_test TYPE string.
DATA : gv_test2 TYPE string.
DATA : gv_test3 TYPE string.
DATA : htype LIKE dd01v-datatype.
"正则表达式
gv_test = '啦啦啦'.
gv_test2 = '123456'.
gv_test3 = '123.456'.
WRITE : / '正则表达式'.
WRITE : / .
IF cl_abap_matcher=>matches( pattern = '^(-?[1-9]\d*(\.\d*[1-9])?)|(-?0\.\d*[1-9])$'
text = gv_test ) = abap_true.
WRITE : / gv_test ,' 是数字'.
ELSE.
WRITE : / gv_test ,' 不是数字'.
ENDIF.
IF cl_abap_matcher=>matches( pattern = '^(-?[1-9]\d*(\.\d*[1-9])?)|(-?0\.\d*[1-9])$'
text = gv_test2 ) = abap_true.
WRITE :/ gv_test2 ,' 是数字'.
ELSE.
WRITE :/ gv_test2 ,' 不是数字'.
ENDIF.
IF cl_abap_matcher=>matches( pattern = '^(-?[1-9]\d*(\.\d*[1-9])?)|(-?0\.\d*[1-9])$'
text = gv_test3 ) = abap_true.
WRITE :/ gv_test3 ,' 是数字'.
ELSE.
WRITE :/ gv_test3 ,' 不是数字'.
ENDIF.
WRITE / .
ULINE /.
"NUMERIC_CHECK函数
WRITE : / 'NUMERIC_CHECK函数'.
WRITE : / .
CALL FUNCTION 'NUMERIC_CHECK'
EXPORTING
string_in = gv_test
IMPORTING
htype = htype.
IF htype = 'NUMC'.
WRITE : / gv_test ,' 是数字'.
ELSE.
WRITE : / gv_test ,' 不是数字'.
ENDIF.
CALL FUNCTION 'NUMERIC_CHECK'
EXPORTING
string_in = gv_test2
IMPORTING
htype = htype.
IF htype = 'NUMC'.
WRITE : / gv_test2 ,' 是数字'.
ELSE.
WRITE : / gv_test2 ,' 不是数字'.
ENDIF.
CALL FUNCTION 'NUMERIC_CHECK'
EXPORTING
string_in = gv_test3
IMPORTING
htype = htype.
IF htype = 'NUMC'.
WRITE : / gv_test3 ,' 是数字'.
ELSE.
WRITE : / gv_test3 ,' 不是数字'.
ENDIF.
WRITE / .
ULINE /.
测试结果
作者:小飞猪猪猪猪猪猪猪–CSDN