如何检查字符串是否仅包含大小写混合?

时间:2019-04-22 12:33:26

标签: sap abap

我该如何更正此代码行,以便更好地过滤我的输入条件:

IF STRING CA SY-ABCDE and STRING CN SY-ABCDE.

我的条件是:

  • 输入的内容不能全部为大写或全部为大写(名称或名称),可以使用“名称”。

  • 如果输入包含数字或符号(可接受123%Name,不接受123%NAME或123%name),则可以接受。

我提供的代码行满足第一个条件和第二个条件的一半,但是我无法更改它,因此如果输入为123%NAME,它会被拒绝。

3 个答案:

答案 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.