Что нового

GUICtrlRegExpRestrict - Ограничение элементов ввода рег. выражением

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
AutoIt: 3.3.6.1 - 3.3.12.0
Версия: 1.4

Категория: Элементы GUI

Описание: Библиотека позволяет ограничивать элементы ввода (Input/Edit) посредством регулярных выражений.

Пример:
Код:
#include <GUIConstantsEx.au3>
#include 'GUICtrlRegExpRestrict.au3'

$hGUI = GUICreate('GUICtrlRegExpRestrict Example', 400, 400)

GUICtrlCreateLabel('Restrict type: [Up to 10 letters]', 130, 12)
$Input_1 = GUICtrlCreateInput('', 10, 10, 100, 20)
_GUICtrlRegExpRestrict_SetPattern(-1, '^[a-z]{0,10}$')

GUICtrlCreateLabel('Restrict type: [European(?) date format DD.MM.YYYY]', 130, 82)
$Input_2 = GUICtrlCreateInput('', 10, 80, 100, 20)
_GUICtrlRegExpRestrict_SetPattern(-1, '^([012][0-9]|3[01])\.(0[1-9]|1[012])\.\d{4}$', '31.12.1999')

GUICtrlCreateLabel('Restrict type: [e-Mail address]', 130, 152)
$Input_3 = GUICtrlCreateInput('', 10, 150, 100, 20)
_GUICtrlRegExpRestrict_SetPattern(-1, '^\w{1,20}@\w{2,20}\.[a-z]{2,4}$', '[email protected]')

GUICtrlCreateLabel('Restrict type: [Day of month (including ranges)]', 130, 222)
$Input_4 = GUICtrlCreateInput('', 10, 220, 100, 20)
_GUICtrlRegExpRestrict_SetPattern(-1, '^(((?<![3-9])[0-9]|(?<=3)[0-1]){1,2}(?!\d)(, ?|-)?)*$')

GUICtrlCreateLabel('Restrict type: [Full file version, ex: 1.0.0.0]', 130, 292)
$Input_5 = GUICtrlCreateInput('', 10, 290, 100, 20)
_GUICtrlRegExpRestrict_SetPattern(-1, '^\d+\.\d+\.\d+\.\d+$', '1.0.0.0')

GUISetState(@SW_SHOW, $hGUI)

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd

Файл: GUICtrlRegExpRestrict.zip

Снимок:


История версий:
[1.4]
* Убраны функции инициализации, теперь инициализация происходит при первом использовании.
* Теперь сохраняется выделение при неверном вводе или вставке текста (используется хук клавиатуры и мышки).
* Исправлена проблема с _GUICtrlRegExpRestrict_RemovePattern.
* Исправлена проблема с установкой цвета по умолчанию поля ввода.
* Протестировано на AutoIt 3.3.12.0.

[1.3]
* Исправлена проблема со случайной установкой белого цвета у последнего элемента GUI (не Input/Edit).
* Теперь все переменные объявлены корректно.
* Улучшены выражения в примере.
* Мелкие поправки.

Источник: autoitscript.com, www.autoit-script.ru
Автор(ы): peethebee, G.Sandler (CreatoR)
 

n-deer

Новичок
Сообщения
16
Репутация
0
Еще раз спасибо за оперативную помощь!

В функции __GCRER_Handler незадекларирована $_re_rc_regex_res, Wrapper ругается.

В выражениях из примеров есть недостатки: [European(?) date format DD.MM.YYYY] пропускает "1111111111", а [e-Mail address] - "aa@aa aa" (позволяет ввести пробел).

Еще обнаружил, что при включении мониторинга элементов (GUICtrlRegExpRestrict_Startup) "портится" стиль последнего контрола в окне.

Пример:
Код:
#include <GUIConstantsEx.au3>
#include "GUICtrlRegExpRestrict.au3"

_GUICtrlRegExpRestrict_Startup()

$hGUI = GUICreate("GUICtrlRegExpRestrict Example", 400, 400)

GUICtrlCreateLabel("Restrict type: [Up to 10 letters]", 130, 12)
$Input_1 = GUICtrlCreateInput("", 10, 10, 100, 20)
_GUICtrlRegExpRestrict_SetPattern(-1, "^[a-z]{0,10}$")

GUICtrlCreateLabel("Restrict type: [European(?) date format DD.MM.YYYY]", 130, 102)
$Input_2 = GUICtrlCreateInput("", 10, 100, 100, 20)
_GUICtrlRegExpRestrict_SetPattern(-1, "^[0123]{1}[0-9]{1}.[01]{1}[0-9]{1}.[12]{1}[0-9]{3}$", "12.12.1222")

GUICtrlCreateLabel("Restrict type: [e-Mail address]", 130, 202)
$Input_3 = GUICtrlCreateInput("", 10, 200, 100, 20)
_GUICtrlRegExpRestrict_SetPattern(-1, "^[a-zA-Z_0-9]{1,20}@[a-zA-Z_0-9]{2,20}.[a-z]{2,4}$", "[email protected]")

GUICtrlCreateLabel("Restrict type: [Day of month (including ranges)]", 130, 302)
$Input_4 = GUICtrlCreateInput("", 10, 300, 100, 20)
_GUICtrlRegExpRestrict_SetPattern(-1, "^(((?<![3-9])[0-9]|(?<=3)[0-1]){1,2}(?!\d)(, ?|-)?)*$")

$Btn_1 = GUICtrlCreateButton("Btn_1", 50, 350, 80, 27)
$Btn_2 = GUICtrlCreateButton("Btn_2", 150, 350, 80, 27)
$Btn_3 = GUICtrlCreateButton("Btn_3", 250, 350, 80, 27)
;~ GUICtrlCreateDummy()

GUISetState(@SW_SHOW, $hGUI)

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE, $Btn_1, $Btn_2, $Btn_3
			Exit
	EndSwitch
WEnd


GUICtrlRegExpRestrict_CtrlError.png

Кнопка "Btn_3" стала плоской. Причем меняется всегда последний элемент, это видно, если раскомментировать GUICtrlCreateDummy()
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
n-deer [?]
В функции __GCRER_Handler незадекларирована $_re_rc_regex_res, Wrapper ругается.
Ругается т.к используется Opt("MustDeclareVars", 1), но объявить конечно надо.

В выражениях из примеров есть недостатки: [European(?) date format DD.MM.YYYY] пропускает "1111111111", а [e-Mail address] - "aa@aa aa" (позволяет ввести пробел).
Ну это как бы не ко мне, эти выражения строил не я :whistle:

при включении мониторинга элементов (GUICtrlRegExpRestrict_Startup) "портится" стиль последнего контрола в окне.
Да, это мой косяк, нужно проверять последний элемент а не сразу задавать ему цвет.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Обновил.

[1.3]
* Исправлена проблема со случайной установкой белого цвета у последнего элемента GUI (не Input/Edit).
* Теперь все переменные объявлены корректно.
* Улучшены выражения в примере.
* Мелкие поправки.
 

SlavaS

Знающий
Сообщения
35
Репутация
5
Решил воспользоваться данным UDF, обнаружил ошибочку в функции _GUICtrlRegExpRestrict_RemovePattern
Должно быть так:
Код:
If $a_GCRER_Arr[$i][0] <> $i_RC_CtrlID Then

			$a__RegEx_RC_Tmp[0][0] += 1
			ReDim $a__RegEx_RC_Tmp[$a__RegEx_RC_Tmp[0][0]+1][4]

			$a__RegEx_RC_Tmp[$a__RegEx_RC_Tmp[0][0]][0] = $a_GCRER_Arr[$i][0]
			$a__RegEx_RC_Tmp[$a__RegEx_RC_Tmp[0][0]][1] = $a_GCRER_Arr[$i][1]
			$a__RegEx_RC_Tmp[$a__RegEx_RC_Tmp[0][0]][2] = $a_GCRER_Arr[$i][2]
			$a__RegEx_RC_Tmp[$a__RegEx_RC_Tmp[0][0]][3] = $a_GCRER_Arr[$i][3]
		EndIf
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Обновление...

[1.4]
* Убраны функции инициализации, теперь инициализация происходит при первом использовании.
* Теперь сохраняется выделение при неверном вводе или вставке текста (используется хук клавиатуры и мышки).
* Исправлена проблема с _GUICtrlRegExpRestrict_RemovePattern.
* Исправлена проблема с установкой цвета по умолчанию поля ввода.
* Протестировано на AutoIt 3.3.12.0.
 

eus_deus

Новичок
Сообщения
118
Репутация
0
CreatoR,
Прошу прощения, вчера ссылка не работала
 
Верх