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 >
3 Réponses :
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.
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".
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.
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.
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