我用过的正则表达式(ABAP)

前言

简单的如只包含数字或字母等,可以使用表达式CA或CO实现;
正则表达式匹配可以用关键字find,match或count实现。
列表
目前只有一个

功能 表达式 备注
非法字符 [^[:print:]] SAP系统不支持的字符
中文 [u4E00-u9FA5] 中文汉字和符号

示例代码

 constants:
      "          lc_chinese_regex type string value '[^u4E00-u9FA5]+$', "匹配汉字及符号
      lc_em_char      type string value '()、。、,、’', "全角正则表达式
      lc_lower_case   type string value 'qwertyuiopasdfghjklzxcvbnm' ##NO_TEXT,
      lc_common_regex type string value '[0-9A-Z、-]'
      "              lc_em_regex      type string value '[()、。、,、’]'
      . "全角符号

    "汉字和半角前台显示两个字符,字母和半角显示为1个字符
    "汉字只能和全角字符组合,英文只能和半角字符组合
    "因此,通过计算字符长度和显示长度的余数,即可判断是否合法
    data(lv_name_display_length) = cl_abap_list_utilities=>dynamic_output_length( <fs_bp_basic>-zzbpnm  ).
    data(lv_name_char_strlen) =  strlen( <fs_bp_basic>-zzbpnm  ).

    "计算通用字符长度(在中英文名称中均可能出现)
    data(lv_common_length) = count( val = <fs_bp_basic>-zzbpnm  regex = lc_common_regex ).
    "减去通用字段长度后,计算余数
    data(lv_div) = ( lv_name_display_length  - lv_common_length )  mod ( lv_name_char_strlen  - lv_common_length ).
    if lv_div ne 0.
      message e041 into data(lv_zmdg_041).
      lv_error_message = lv_error_message  && '/' && lv_zmdg_041.
    endif.

猜你喜欢

转载自blog.csdn.net/u012232542/article/details/108976320