我该如何更正此代码行,以便更好地过滤我的输入条件:
IF STRING CA SY-ABCDE and STRING CN SY-ABCDE.
我的条件是:
输入的内容不能全部为大写或全部为大写(名称或名称),可以使用“名称”。
如果输入包含数字或符号(可接受123%Name,不接受123%NAME或123%name),则可以接受。
我提供的代码行满足第一个条件和第二个条件的一半,但是我无法更改它,因此如果输入为123%NAME,它会被拒绝。
答案 0 :(得分:4)
您还可以检查字符串中是否至少有一个大写字母和一个小写字母:
IF lv_text CA sy-abcde AND lv_text CA to_lower( sy-abcde ) AND lv_text NA '/\[}$*'.
WRITE:/ 'yes'.
ELSE.
WRITE:/ 'no'.
ENDIF.
答案 1 :(得分:3)
您可以使用大写或小写形式检查字符串。
DATA: lv_m TYPE string VALUE 'Abc',
lv_l TYPE string,
lv_u TYPE string.
lv_u = lv_m.
lv_l = lv_m.
TRANSLATE lv_u TO UPPER CASE.
TRANSLATE lv_l TO LOWER CASE.
IF lv_u NE lv_m and lv_u ne lv_m.
MESSAGE 'Not equal' TYPE 'E'.
ENDIF.
您还可以将to_upper / to_lower函数用于更新的系统。
DATA: lv_m TYPE string VALUE 'Abc'.
IF lv_m ne to_upper( lv_m ) and lv_m ne to_lower( lv_m ).
MESSAGE 'Not equal' TYPE 'E'.
ENDIF.
答案 2 :(得分:0)
在这种情况下,我们的想法是使用否定的match()
-因为更容易定义您认为无效对您的要求有效的内容。
REPORT ZZ_TEST_MIXED_CASE.
parameters: string type string lower case.
data(lv_match) = match( val = string regex =
`^(\U+|\L+)$|[^\w%]` " <--- Add here after '%' what else you consider as valid 'symbols'
).
if lv_match is initial.
write: / 'OK'.
else.
write: / 'Not OK'.
endif.