Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Проверка количества вводимых символов в переменную (http://forum.oszone.net/showthread.php?t=353056)

sushnyak 15-02-2023 05:58 3003218

Проверка количества вводимых символов в переменную
 
Как реализовать проверку на введённые символы?
нужна проверка количества вводимых символов в переменную,
символы могут быть как цифровые/текстовые/комбинированные
но их количество должно быть не менее 8 и не более 63


ввод в переменную SET /p KEY= (цифры и/или буквы в количестве от 8 до 63 символов)
если условие не выполняется вернуться к началу
если условие выполняется перейти на следующую метку

моих знаний здесь явно недостаточно, нужна помощь Гуру.

megaloman 15-02-2023 08:50 3003225

Код:

@Echo Off
cls
        Set /A Min=8, Max=63
        Set "R=0-9A-Za-z"
        :Begin
                Echo.
                Set "KEY="
                (Set /P KEY=Input KEY %Min%^<=n^<=%Max% "%R%" or empty string for Exit ^> )
                If "%KEY%"=="" (Echo Empty string. Canceled. &Exit /B 0)
                Call :Check "%KEY%" %Min% %Max% "%R%"
        If %ErrorLevel% NEQ 0 (Echo !!! Wrong KEY="%KEY%" &GoTo :Begin)

        Echo. &Echo we continue to sculpt our ingenious script :) !!!
Pause
Exit /B

:Check
        If "%~1"=="" Exit /B 1
        Set /A MM=%2-1
        Set "In=%~1"
        Call Set "In1=%%In:~%MM%,1%%"
        Call Set "In2=%%In:~%3,1%%"
        If Not "%In1%"=="" If "%In2%"=="" Echo %~1|>nul 2>nul FindStr /R /C:"^[%~4]*$" &&Exit /B 0
Exit /B 1


megaloman 15-02-2023 09:33 3003236

Вложений: 1
Цитата:

Цитата sushnyak
1 завершает работу при нажатии Enter (без ввода данных) »

так задумано. Я считаю, что должен быть простой способ выйти из цикла при вводе данных
Цитата:

Цитата sushnyak
2 не проходит проверку если вводимые данные комбинированы (буквы и цифры) »

Это инсинуации :) . Докажите. Свой скриншот я приложил

sushnyak 15-02-2023 10:08 3003240

Код:

If "%KEY%"=="" (Echo Empty string. Canceled. &Exit /B 0)
в этой строке заменил выделенное на
Код:

GoTo :Begin
Лишь в этом случае сценарий продолжает работать,
если поле ввода оставить пустым и нажать Enter (без ввода данных)

Можно ли скрыть лишнюю информацию из выводимой строки приглашения ?
Цитата:

Input KEY 8<=n<=63 "0-9A-Za-z" or empty string for Exit >
лишнее выделил

YuS_2 15-02-2023 10:20 3003242

Цитата:

Цитата sushnyak
проверка количества вводимых символов в переменную »

Цитата:

Цитата sushnyak
символы могут быть как цифровые/текстовые/комбинированные »

Будьте осторожны в своих желаниях :)
Надо понимать, что попытка ввода некоторых недопустимых символов попросту будет заваливать весь код, т.е. будет вызвано исключение и прерывание работы сценария. Полностью исключить такую ситуацию в CMD затруднительно.

sushnyak 15-02-2023 10:26 3003243

Цитата:

Цитата megaloman
Это инсинуации . Докажите. Свой скриншот я приложил »

Они самые :)
по невнимательности вводил буквы кириллицей.
так что пардоньте :not-me:

sushnyak 15-02-2023 10:55 3003247

Цитата:

Цитата YuS_2
попытка ввода некоторых недопустимых символов »

о спец символах не было речи, если смутило слово комбинированные,
то подразумевается ввод текстово-цифровой (46h0j35b3v86) для примера.

megaloman 15-02-2023 13:41 3003257

sushnyak,
По мотивам Ваших хотелок с косметическими изменениями
Код:

@Echo Off
cls
        Set /A Min=8, Max=63
        Set "R=0-9A-Za-z"
        :Begin
                Echo. &Set "KEY="
                (Set /P KEY=Input KEY ^> )
        Call :Check "%KEY%" %Min% %Max% "%R%" ||(Echo !!! Wrong KEY="%KEY%" &GoTo :Begin)

        Echo. &Echo KEY="%KEY%" We continue to sculpt our ingenious script :) !!!

Pause
Exit /B

:Check
        Echo %~1|>nul 2>nul FindStr /R /C:"^[%~4]*$" ||Exit /B 1
        Set /A MM=%2-1
        Set "In=%~1"
        Call Set "In1=%%In:~%MM%,1%%"
        Call Set "In2=%%In:~%3,1%%"
        If Not "%In1%"=="" If "%In2%"=="" Exit /B 0
Exit /B 1


sushnyak 15-02-2023 14:58 3003260

megaloman,

Премного благодарен за помощь,
последний код - самое, что надо :yahoo:

YuS_2 15-02-2023 17:06 3003271

Цитата:

Цитата sushnyak
о спец символах не было речи, если смутило слово комбинированные »

Да мне-то чего смущаться? :)
Элементарная логика... если Вам требуется проверка на правильность ввода, то это явно не лично для Вас (а иначе не вижу смысла в такой проверке). Далее, если символы будет вводить кто-то ещё, то ему рано или поздно придет в голову мысль, что надо попробовать набрать какое-нибудь непотребство (если есть уверенность, что не придет, то всегда на готове встречный вопрос: а зачем тогда проверка?). В общем, код будет завален, сценарий прерван, со всеми вытекающими... а вот далее, всё зависит от критичности исполнения кода и естественно, решение о приемлемости неустойчивого кода... за Вами.


Время: 17:15.

Время: 17:15.
© OSzone.net 2001-