Что нового

Допустить использования в Input только цифр и знак "точку"

nu3dell

Осваивающий
Сообщения
139
Репутация
24
Нужно фильтровать Input что бы можно было вводить только цифры и знак точки.
Более менее подходить $es_number, но нельзя писать точку
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
nu3dell, случайно не для ввода IP адреса делаете? А то есть функция _GUICtrlIpAddress_Create в GuiIPAddress.au3
 

beliy

Продвинутый
Сообщения
372
Репутация
72
Надо только чуть изменить :
Код:
;$Data = StringRegExpReplace($Data, "[^0-9]", "")
$Data = StringRegExpReplace($Data, "[^0-9.]", "")

А что если пользователь введет несколько точек в числе?;)
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Re: Допустить использования в Input только цифр и знак \"точку\"

beliy [?]
А что если пользователь введет несколько точек в числе?

И на это есть решение :
Код:
$Data =StringRegExpReplace( $Data, '((?<=\.)\.|[A-Za-z])', '' )


даже наверное так корректнее :
Код:
$Data =StringRegExpReplace( $Data, '((?<=\.)\.|[A-Za-zа-ёЁ-Я])', '' )


и знаки препинания надо добавить в исключения... :stars:



Добавлено:
Сообщение автоматически объединено:

Так все же корректней будет :
Код:
;$Data = StringRegExpReplace(StringRegExpReplace( $Data, '(?<=\.)\.', ''),"[^0-9.]", "")


Это выражение еще и не допустит ввода точки в начале :

Код:
$Data = StringRegExpReplace($Data, "((?<=\.)\.|[^\d\.]|\A\.\z)", "")
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>

$hGui = GUICreate('Только число', 220, 180)
$iInput = GUICtrlCreateInput('', 10, 10, 200, 20, -1, $WS_EX_STATICEDGE)
GUISetState()
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')

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

Func WM_COMMAND($hWnd, $imsg, $iwParam, $ilParam)
	Local $nNotifyCode, $nID, $sText
	$nNotifyCode = BitShift($iwParam, 16)
	$nID = BitAND($iwParam, 0xFFFF)
	Switch $hWnd
		Case $hGui
			Switch $nID
				Case $iInput
					Switch $nNotifyCode
						Case $EN_CHANGE
							; $sText = StringRegExp(GUICtrlRead($iInput), '(\d+\.\d+|\d+\.|\d+)', 2)
							$sText = StringRegExp(GUICtrlRead($iInput), '(\d+(\.(\d+)?)?)', 2)
							If @error Then
								GUICtrlSetData($iInput, '')
							Else
								GUICtrlSetData($iInput, $sText[0])
							EndIf
					EndSwitch
			EndSwitch
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
А это скорректированный для данного случая пример от Yashied:
Код:
;http://forum.oszone.net/post-1124334-3.html
; Yashied	
#Include <GUIConstants.au3>
#Include <EditConstants.au3>
#Include <WindowsConstants.au3>

GUICreate("MyGUI", 300, 50)
$Input = GUICtrlCreateInput("", 15, 15, 270, 19)
GUIRegisterMsg($WM_COMMAND, "_WM_COMMAND")
GUISetState()

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

Func _WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
	Switch BitAND($wParam, 0xFFFF)
		Case $Input
			Switch BitShift($wParam, 16)
				Case $EN_CHANGE
					Local $Data = GUICtrlRead($Input)
					;$Data = StringRegExpReplace($Data, "[^0-9]", "")	
					$Data = StringRegExpReplace($Data, "((?<=\.)\.|[^\d\.]|\A\.\z)", "")
					GUICtrlSetData($Input, $Data)
			EndSwitch
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
AZJIO [?]
А в вашем примере я спокойно ввожу 1.2.3.4.5.6
Автор темы ведь не просил введения этого ограничения.
Может он будет IP вводить ?
Значит есть два варианта.
 
Верх