Как проверить, содержит ли строка только смешанный регистр? - PullRequest
1 голос
/ 22 апреля 2019

Как я могу исправить эту строку кода, чтобы лучше отфильтровать мои условия ввода:

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

Мои условия:

  • Входные данные не должны быть все UpperCaseили все в нижнем регистре (ИМЯ или имя), допустимо «Имя».

  • Ввод допустим, если он содержит цифры или символы (имя 123% допустимо, ИМЯ 123% или имя 123%не).

Предоставленная мною строка кода выполняет первое условие и половину второго, но мне не удается изменить его так, чтобы оно отклонялось, если входное значение равно 123%.ИМЯ.

Ответы [ 3 ]

4 голосов
/ 24 апреля 2019

Вы также можете проверить, есть ли в строке хотя бы одна заглавная буква и одна строчная буква:

IF lv_text CA sy-abcde AND lv_text CA to_lower( sy-abcde ) AND lv_text NA '/\[}$*'.
  WRITE:/ 'yes'.
ELSE.
  WRITE:/ 'no'.
ENDIF.
3 голосов
/ 22 апреля 2019

Вы можете проверить строку с самим верхним или нижним регистром.

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.
0 голосов
/ 23 апреля 2019

Идея состоит в том, чтобы использовать отрицательный 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.
...