Как найти любые нецифровые символы, используя RegEx в ABAP - PullRequest
1 голос
/ 11 октября 2019

Мне нужно Регулярное выражение, чтобы проверить, содержит ли значение какие-либо другие символы, кроме цифр от 0 до 9.

Я также хочу проверить длину значения.

RegEx IЯ сделал: ^ ([0-9] \ d {6}) $

Мое тестовое значение: 123Z45 и 123456

Код ABAP:

FIND ALL OCCURENCES OF REGEX '^([0-9]\d{6})$' IN L_VALUE RESULTS DATA(LT_RESULTS).

Я ожидаю результата в LT_RESULTS, когда тестирую первое тестовое значение '123Z45', потому что есть нецифровый символ.

Но LT_RESULTSпочти в каждом тестовом случае пусто.

Ответы [ 3 ]

1 голос
/ 11 октября 2019

Ваше выражение ^([0-9]\d{6})$ переводится в:

  • ^ - начало ввода
  • ( - начало группы захвата
    • [0-9] -символ от 0 до 9
    • \d{6} - шесть цифр (цифра = символ от 0 до 9)
  • ) - конечная группа захвата
  • $ - конец ввода

Таким образом, он будет соответствовать только 1234567 (7-значные строки), но не 123456 или 123Z45.

Если выпросто нужно найти строку, содержащую не цифры, вы могли бы вместо этого использовать следующее: ^\d*[^\d]+\d*$

  • * - предыдущий элемент может встречаться ноль, один или несколько раз
  • [^\d] - ^ сразу после [ означает «НЕ», то есть любой символ, который не является цифрой
  • + - предыдущий элемент может встречаться один или несколько раз

Пример:

const expression = /^\d*[^\d]+\d*$/;
const inputs = ['123Z45', '123456', 'abc', 'a21345', '1234f', '142345'];

console.log(inputs.filter(i => expression.test(i)));
0 голосов
/ 14 октября 2019

Если вам не нужно регулярное выражение для чего-то более сложного, в ABAP есть несколько хороших операторов сравнения CO (содержит только), CA, NA и т. Д. Что-то вроде:

IF L_VALUE CO '0123456789' AND STRLEN( L_VALUE ) = 6.
0 голосов
/ 12 октября 2019

Вы также можете использовать этот класс символов , если вы хотите извлечь нецифровую группу:

DATA(l_guid) = '0074162D8EAA549794A4EF38D9553990680B89A1'.

DATA(regx) = '[[:alpha:]]+'.

DATA(substr) = match( val   = l_guid
                      regex = regx
                      occ   = 1 ).

Он находит первую найденную нецифровую группу символов и показывает ее.

Если вы хотите просто проверить, существуют ли они или сколько из них находится в вашей строке, встроенная функция подсчета - ваш друг:

DATA(how_many) = count( val = l_guid regex = regx ).

DATA(yes) = boolc( count( val = l_guid regex = regx ) > 0 ).

Соответствие и count существует с ABAP 7.50.

...