Что нового

Маска ввода в поле input

mxmod

Новичок
Сообщения
8
Репутация
0
Здравствуйте. Интересует создание маски кода паспорта в поле input что-то вроде 111-111, т.е после 3 цифр должен быть дефис и перескакивать через него на следующую цифру. Как понимаю, это можно сделать через регулярные выражения, но я не нашёл подобных примеров и самому сложно разобраться. Помогите, пожалуйста, с простым примером как это можно реализовать.
 
Автор
M

mxmod

Новичок
Сообщения
8
Репутация
0
Дайте пример полностью заполненной строки с дефисами.
У меня простой код есть с полем ввода. Нужно просто маску сделать вроде "111-111"

Код:
#include <GUIConstantsEx.au3>
GUICreate("Окно", 1000, 800)
$inputCode=GUICtrlCreateInput("", 10, 100, 400, 30)


GUISetState(@SW_SHOW)

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

Norm

Продвинутый
Сообщения
279
Репутация
74
Как было задано в условии, сделал ввод только чисел с максимальной длинной строки 7
Код:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>

_AusweisCheck()

Func _AusweisCheck()
    Local $hGUI = GUICreate("Example", 200, 40)
    Local $hInput = GUICtrlCreateInput("", 5, 5, 190, 20, $ES_NUMBER)
    GUISetState(@SW_SHOW, $hGUI)

    Local $sLast4, $nLimit = 7
    Local $sReadInput = ""
    Local $sCheckInput = -1

    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
            Case Else
                $sReadInput = GUICtrlRead($hInput)
                If $sCheckInput <> $sReadInput Then
        ;            If StringRegExp($sReadInput, "[^-]{4}$") Then ; <= С регулярным выражением

                    $sLast4 = StringRight($sReadInput,4) ; <= Без регулярного выражения
                    If StringLen($sLast4) = 4 And (Not StringInStr($sLast4, "-")) Then ; <= Без регулярного выражения

                        $sReadInput = StringTrimRight($sReadInput,1) &"-"& StringRight($sReadInput,1)
                        GUICtrlSetData($hInput, $sReadInput)
                    EndIf
                    If StringLen($sReadInput) > $nLimit Then
                        $sReadInput = StringLeft($sReadInput, $nLimit)
                        GUICtrlSetData($hInput, $sReadInput)
                    EndIf
                    $sCheckInput = $sReadInput
                EndIf
        EndSwitch
    WEnd
EndFunc
 
Последнее редактирование:
Автор
M

mxmod

Новичок
Сообщения
8
Репутация
0
Как было задано в условии, сделал ввод только чисел с максимальной длинной строки 7
Код:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>

_AusweisCheck()

Func _AusweisCheck()
    Local $hGUI = GUICreate("Example", 200, 40)
    Local $hInput = GUICtrlCreateInput("", 5, 5, 190, 20, $ES_NUMBER)
    GUISetState(@SW_SHOW, $hGUI)

    Local $sLast4, $nLimit = 11
    Local $sReadInput = ""
    Local $sCheckInput = -1

    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
            Case Else
                $sReadInput = GUICtrlRead($hInput)
                If $sCheckInput <> $sReadInput Then
        ;            If StringRegExp($sReadInput, "[^-]{4}$") Then ; <= С регулярным выражением

                    $sLast4 = StringRight($sReadInput,4) ; <= Без регулярного выражения
                    If StringLen($sLast4) = 4 And (Not StringInStr($sLast4, "-")) Then ; <= Без регулярного выражения

                        $sReadInput = StringTrimRight($sReadInput,1) &"-"& StringRight($sReadInput,1)
                        GUICtrlSetData($hInput, $sReadInput)
                    EndIf
                    If StringLen($sReadInput) > $nLimit Then
                        $sReadInput = StringLeft($sReadInput, $nLimit)
                        GUICtrlSetData($hInput, $sReadInput)
                    EndIf
                    $sCheckInput = $sReadInput
                EndIf
        EndSwitch
    WEnd
EndFunc
Спасибо, добрый человек, всё работает.
 
Верх