1
votes

Comment vérifier si une chaîne contient uniquement une casse mixte?

Comment pourrais-je corriger cette ligne de code afin de mieux filtrer mes conditions de saisie:

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

Mes conditions sont:

  • L'entrée ne doit pas être entièrement en majuscules ou en minuscules (NOM ou nom), «Nom» est acceptable.

  • L'entrée est acceptable si elle contient des nombres ou des symboles (123% Name est acceptable, 123% NAME ou 123% name ne l'est pas).

La ligne de code que j'ai fournie remplit la première condition et la moitié de la 2ème, mais je ne parviens pas à la changer pour qu'elle soit refusée si l'entrée est 123% NAME.

p >


0 commentaires

3 Réponses :


3
votes

Vous pouvez vérifier la chaîne avec elle-même un format majuscule ou minuscule.

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.

Vous pouvez également utiliser les fonctions to_upper / to_lower pour les systèmes mis à jour.

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.


2 commentaires

La réponse gagnerait à inclure la gestion des majuscules et des minuscules, et je pense que cela vaut la peine d'utiliser les fonctions to_upper et to_lower .


Je nierais la condition entière (ou la changerais positivement en "= ou =") afin d'envoyer l'erreur uniquement si l'entrée est "NON acceptable".



0
votes

L'idée est d'utiliser un match () inversé dans ce cas - car il est plus facile de définir ce que vous considérez pas comme étant valide pour vos besoins.

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.


0 commentaires

4
votes

vous pouvez également vérifier s'il y a au moins une lettre majuscule et une lettre minuscule dans la chaîne:

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 commentaires

Ajout d'une relation supplémentaire pour remplir la deuxième condition de OP, ainsi la chaîne peut contenir tous les caractères spéciaux sauf ceux qu'il considère comme erronés