Показать полную графическую версию : [решено] Проверка количества вводимых символов в переменную
sushnyak
15-02-2023, 05:58
Как реализовать проверку на введённые символы?
нужна проверка количества вводимых символов в переменную,
символы могут быть как цифровые/текстовые/комбинированные
но их количество должно быть не менее 8 и не более 63
ввод в переменную SET /p KEY= (цифры и/или буквы в количестве от 8 до 63 символов)
если условие не выполняется вернуться к началу
если условие выполняется перейти на следующую метку
моих знаний здесь явно недостаточно, нужна помощь Гуру.
megaloman
15-02-2023, 08:50
@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
1 завершает работу при нажатии Enter (без ввода данных) »так задумано. Я считаю, что должен быть простой способ выйти из цикла при вводе данных2 не проходит проверку если вводимые данные комбинированы (буквы и цифры) »Это инсинуации :) . Докажите. Свой скриншот я приложил
sushnyak
15-02-2023, 10:08
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 >
лишнее выделил
проверка количества вводимых символов в переменную »
символы могут быть как цифровые/текстовые/комбинированные »
Будьте осторожны в своих желаниях :)
Надо понимать, что попытка ввода некоторых недопустимых символов попросту будет заваливать весь код, т.е. будет вызвано исключение и прерывание работы сценария. Полностью исключить такую ситуацию в CMD затруднительно.
sushnyak
15-02-2023, 10:26
Это инсинуации . Докажите. Свой скриншот я приложил »
Они самые :)
по невнимательности вводил буквы кириллицей.
так что пардоньте :not-me:
sushnyak
15-02-2023, 10:55
попытка ввода некоторых недопустимых символов »
о спец символах не было речи, если смутило слово комбинированные,
то подразумевается ввод текстово-цифровой (46h0j35b3v86) для примера.
megaloman
15-02-2023, 13:41
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
megaloman,
Премного благодарен за помощь,
последний код - самое, что надо :yahoo:
о спец символах не было речи, если смутило слово комбинированные »
Да мне-то чего смущаться? :)
Элементарная логика... если Вам требуется проверка на правильность ввода, то это явно не лично для Вас (а иначе не вижу смысла в такой проверке). Далее, если символы будет вводить кто-то ещё, то ему рано или поздно придет в голову мысль, что надо попробовать набрать какое-нибудь непотребство (если есть уверенность, что не придет, то всегда на готове встречный вопрос: а зачем тогда проверка?). В общем, код будет завален, сценарий прерван, со всеми вытекающими... а вот далее, всё зависит от критичности исполнения кода и естественно, решение о приемлемости неустойчивого кода... за Вами.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.