Как проверить пользовательский ввод в отношении единичного и множественного вхождения регулярного выражения в оболочке - PullRequest
0 голосов
/ 01 октября 2019

В моем сценарии оболочки я хочу проверить ввод пользователя по регулярному выражению. Следующий код подходит для одной записи

read -p "Please enter Box Number : " BN
BN=${BN^^}
while ! [[ "${BN}" =~ ^(XDXX[0-9]{3}050-0)$ ]]; do
    read -p "Please enter Box Number : " BN
done

Но теперь я хочу разрешить пользователю вводить несколько записей, например

xdxx001050-0, xdxx831050-0
xdxx001050-0, xdxx831050-0, xdxx121050-0
xdxx456050-0, xdxx789050-0, xdxx222050-0, xdxx567050-0

Обновление 1: недопустимый ввод в качестве повторяющегося значения

xdxx001050-0, xdxx001050-0

Как я могу расширить свое регулярное выражение для проверки одного или нескольких входов в одной строке

1 Ответ

0 голосов
/ 01 октября 2019

Предполагая, что единственным требованием является проверка ввода, чем вы можете использовать '(RE) +' для принятия одного или нескольких выражений:

RE='(XDXX[0-9]{3}050-0)'
# Multiple items, separated with ', ', on a single line.
MULTI_RE="^($RE, )*$RE$"

# Loop until valid input arrives
until [[ "$BN" =~ $MULTI_RE ]] ; do
    read -p "Enter:" BN
    BN=${BN^^}
done
# Process $BN here

Незначительное исправление исходного вопроса: код применяет верхний регистр($ {BN ^^}) в каждой строке ввода.

...