Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.82/22: Рейтинг темы: голосов - 22, средняя оценка - 4.82
⁞ ★☭ Mad Max ☭★ ⁞
279 / 84 / 12
Регистрация: 04.09.2013
Сообщений: 187

Фильтрация вводимой информации

02.01.2014, 10:37. Показов 4970. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Подскажите, пожалуйста, решение для следующей задачи.
Пользователю предлагается ввести строку, после чего строка проверяется, и если
в ней есть любые символы, кроме латиницы (без учета регистра), цифр и символа _
сообщается об ошибке ввода и предлагается ввести строку заново,
иначе - продолжается выполнение скрипта.
Получилось вот - за подсказку спасибо FraidZZ:

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
chcp 866>nul
 
:Main
cls
set input=
set /p input="Введите имя (просто Enter - отмена операции): "
if %input%=="" exit /b
call :Validate "%input%" "code"
if !code! GTR 0 (
echo+ Имя должно содержать только символы латиницы и\или цифры
pause
goto :Main
)
echo %time:~0,8% - Идет работа
pause
goto :Main
 
:Validate [Входная строка] [Переменная для кода возврата]
set "string=%~1"
set err=0
echo.%string%|findstr /R /C:"[^a-z^A-Z^0-9^_]">nul&&set /a err+=2||set /a err-=1
echo.%string%|findstr /R /C:"[0-9_]">nul&&set /a err-=1
set "%~2=%err%"
exit /b
Вся конструкция падает при введении управляющих символов.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.01.2014, 10:37
Ответы с готовыми решениями:

Контроль вводимой информации
Доброго времени суток. Имеется в наличии небольшой "батник", который выполняет действия архивирования\разархивирования. Суть в том, что...

Проверка вводимой информации
Есть стринггрид, мне нужно сделать что то типа фильтра, чтобы вводить можно было только единичные цифры и пробел. Не прошу кода,...

Кодирование вводимой с клавиатуры информации
Вот расположил компонент RichEdit. Нужно сделать так, чтобы при вводе символов кириллицы с клавиатуры, после нажатия кнопки программа...

30
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
04.01.2014, 14:09
Студворк — интернет-сервис помощи студентам
Dragokas, позволю вопрос - а как тогда циклы делать?
Bash
1
for /l %%A in (1 0 2) do ...
?
1
⁞ ★☭ Mad Max ☭★ ⁞
279 / 84 / 12
Регистрация: 04.09.2013
Сообщений: 187
04.01.2014, 14:36  [ТС]
Dragokas,
еще вопрос - как прикрутить передачу своего паттерна RegEx?
например в одном случае
[^a-z\d_]/i
но, к примеру, в другом случае нужны только цифры?
[0-9] (ну или [\d])
0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
04.01.2014, 14:46
Передачу паттерна как второй аргумент
JavaScript
1
var regExp = new RegExp(WScript.Arguments(1));
1
⁞ ★☭ Mad Max ☭★ ⁞
279 / 84 / 12
Регистрация: 04.09.2013
Сообщений: 187
04.01.2014, 15:05  [ТС]
FraidZZ,
я имел в виду про этот код
https://www.cyberforum.ru/post5588225.html
т.е. из cmd в JS?
0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
04.01.2014, 15:15
Ну дык а там
Bash
1
cscript //e:jscript //nologo "%~f0" "Validate" "[^a-z\d_]/i"
1
⁞ ★☭ Mad Max ☭★ ⁞
279 / 84 / 12
Регистрация: 04.09.2013
Сообщений: 187
04.01.2014, 15:27  [ТС]
FraidZZ,
ладно, тогда так:- Почему не работает?
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
@set @x=0; /*
@echo off
SetLocal EnableExtensions
 
chcp 866>nul
 
:Main
cls
echo+
echo+
set input=
set /p "x=Введите имя (просто Enter - отмена операции): "<NUL
 call :Validate "input" "[^a-z\d_]/i"
 if "%input%"=="" exit /b
if "%input%"=="/FAILURE/" (
echo+ Имя должно содержать только символы латиницы и\или цифры
goto :Main
)
echo+
:numValidate
set input=
set /p "x=Введите цифры (просто Enter - отмена операции): "<NUL
 call :Validate "input" "[\d]"
 if "%input%"=="" exit /b
if "%input%"=="/FAILURE/" (
echo+ Имя должно содержать только цифры
goto numValidate
)
echo %time:~0,8% - Идет работа
pause
goto Main
::
::
:Validate [Входная строка] [Паттерн]
For /F "delims=" %%a in ('cscript //E:JScript //nologo "%~f0" "Validate" "%~2"') do set "%~1=%%a"
exit /b
::
::
:: JS injection
::
::
 
*/try {
  var WSHShell = new ActiveXObject('WScript.Shell');
  var ShellApp = new ActiveXObject('Shell.Application');
 
  switch (WScript.Arguments(0)) {
    case "MessageBox": {
      WScript.Echo (WSHShell.Popup (WScript.Arguments(1).replace(/\\n/g,'\n'),-1,WScript.Arguments(2),+WScript.Arguments(3)));
      break;
    }
    case "Validate": {
      var st = WScript.StdIn.ReadLine();
      if (st.length == 0) WScript.Quit();
      var patt = new RegExp(WScript.Arguments(1));
      if (patt.test(st) == false) WScript.Echo(st); else WScript.Echo('/FAILURE/');
      break;
    }
  }
}
catch (e) { }
0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
04.01.2014, 15:29
Не
Bash
1
call :Validate "input" "[\d]"
а
Bash
1
call :Validate "input" "[\d]/i"
1
⁞ ★☭ Mad Max ☭★ ⁞
279 / 84 / 12
Регистрация: 04.09.2013
Сообщений: 187
04.01.2014, 16:33  [ТС]
FraidZZ, пропускает все, то есть не работает

если вставить
WSHShell.Popup (WScript.Arguments(1))
то в первом паттерне ^ удваивается при передаче,
[^^a-z\d_]/i

Добавлено через 49 минут
надо еще флаг что-ли какой, потому как первый паттерн должен выполняться по false, а второй по true
в
if (patt.test(st) ==
0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
04.01.2014, 16:36
Цитата Сообщение от @Root Посмотреть сообщение
надо еще флаг что-ли какой, потому как первый паттерн должен выполняться по false, а второй по true
в
if (patt.test(st) ==
Ого! Вы с false сравниваете?
JavaScript
1
2
if(patt.test(st)) ... ;
if (!patt.test(st)) ... ;
Первое - если условие истинно, второе - если ложно.
1
⁞ ★☭ Mad Max ☭★ ⁞
279 / 84 / 12
Регистрация: 04.09.2013
Сообщений: 187
04.01.2014, 16:57  [ТС]
FraidZZ,
мне бы пока разобраться, почему вообще все пропускает, я оставил условие
только с цифрами. Ну и
Bash
1
if (patt.test(st) == true)
соответственно.
Еще вопрос - при прямой передаче в JS не может быть нестыковок с типами данных?
Да, и еще.
cp 866 в исходном батнике может влиять?

Добавлено через 12 минут
короче говоря, проще будет сделать еще одну функцию,
например ValidateNum и не парить голову.

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
@set @x=0; /*
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
chcp 866>nul
 
:Main
cls
echo+
echo+
set input=
set /p "x=Введите имя (просто Enter - отмена операции): "<NUL
 call :Validate "input"
 if "%input%"=="" exit /b
if "%input%"=="/FAILURE/" (
echo+ Имя должно содержать только символы латиницы и\или цифры
pause
goto Main
)
echo+
:numValidate
set input=
set /p "x=Введите цифры (просто Enter - отмена операции): "<NUL
 call :ValidateNum "input"
 if "%input%"=="" exit /b
if "%input%"=="/FAILURE/" (
echo+ Имя должно содержать только цифры
pause
goto numValidate
)
echo %time:~0,8% - Идет работа
pause
goto Main
::
::
:Validate [Входная строка]
For /F "delims=" %%a in ('cscript //E:JScript //nologo "%~f0" "Validate"') do set "%~1=%%a"
exit /b
:ValidateNum [Входная строка]
For /F "delims=" %%a in ('cscript //E:JScript //nologo "%~f0" "ValidateNum"') do set "%~1=%%a"
exit /b
::
::
:: JS injection
::
::
 
*/try {
  var WSHShell = new ActiveXObject('WScript.Shell');
  var ShellApp = new ActiveXObject('Shell.Application');
 
  switch (WScript.Arguments(0)) {
    case "MessageBox": {
      WScript.Echo (WSHShell.Popup (WScript.Arguments(1).replace(/\\n/g,'\n'),-1,WScript.Arguments(2),+WScript.Arguments(3)));
      break;
    }
    case "Validate": {
      var st = WScript.StdIn.ReadLine();
      if (st.length == 0) WScript.Quit();
      var RegExp = /[^a-z\d_]/i;
      if (RegExp.test(st) == false) WScript.Echo(st); else WScript.Echo('/FAILURE/');
      break;
    }  
    case "ValidateNum": {
      var st = WScript.StdIn.ReadLine();
      if (st.length == 0) WScript.Quit();
      var RegExp = /[\d]/i;
      if (RegExp.test(st) == true) WScript.Echo(st); else WScript.Echo('/FAILURE/');
      break;
    }
  }
}
catch (e) { }
Всем огромное спасибо!
1
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
04.01.2014, 17:06
Цитата Сообщение от @Root Посмотреть сообщение
короче говоря, проще будет сделать еще одну функцию,
например ValidateNum и не парить голову.
Да, я пытался справиться с удвоением ^, но что-то не выходит.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.01.2014, 17:06

Ограничение вводимой информации в TextBox
День добрый! Не подскажете как ограничить колличество символов вводимых в TextBox. Допустим 6 символов и только цифры. Это...

Ограничение вводимой информации в TextBox
есть код Private Sub TextBox18_Change() TextBox18.MaxLength = 3 If TextBox18.Text &lt;&gt; vbNullString Then TextBox18.Text =...

Проверка вводимой информации на совпадения
Добрый день. Подскажите, пожалуйста, как мне осуществить такую штучку: при вводе информации сделать проверку на сходство данных с другой...

Отправка вводимой информации на email
Подскажите как написать код так чтобы человек ввел email и pass после нажатия кнопки START его email и pass отправились на почту пример...

проверка правильности вводимой информации
Автоматическая проверка правильности вводимой в форму информации. Пользователь вводит в текстовые поля данные для базы... как сделать эту...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru