ahmed9100 Posted September 4, 2013 Posted September 4, 2013 i have make this for test if the ip is valid or not from input any one see something messing please tell me any one have a better code tell me because im making a program and i dont need to enter a wrong ip address in me database here is my code expandcollapse popup#include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> $Form1 = GUICreate("Form1", 193, 119, 357, 225) $Input1 = GUICtrlCreateInput("", 24, 30, 145, 21) $Button1 = GUICtrlCreateButton("Button1", 48, 64, 97, 33) GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit case $Button1 $i = Checkip(GUICtrlRead($Input1)) MsgBox("","",$i) EndSwitch WEnd Func Checkip($data) $split = StringSplit($data,".",1) $1stnum = "*" $2dnum = "*" $3dnum = "*" $4thnum = "*" if $split[0] = "4" Then $0 = StringReplace($split[1],"0","") $1 = StringReplace($0,"1","") $2 = StringReplace($1,"2","") $3 = StringReplace($2,"3","") $4 = StringReplace($3,"4","") $5 = StringReplace($4,"5","") $6 = StringReplace($5,"6","") $7 = StringReplace($6,"7","") $8 = StringReplace($7,"8","") $8 = StringReplace($8,"9","") $1stnum = $8 $0 = StringReplace($split[2],"0","") $1 = StringReplace($0,"1","") $2 = StringReplace($1,"2","") $3 = StringReplace($2,"3","") $4 = StringReplace($3,"4","") $5 = StringReplace($4,"5","") $6 = StringReplace($5,"6","") $7 = StringReplace($6,"7","") $8 = StringReplace($7,"8","") $8 = StringReplace($8,"9","") $2dnum = $8 $0 = StringReplace($split[3],"0","") $1 = StringReplace($0,"1","") $2 = StringReplace($1,"2","") $3 = StringReplace($2,"3","") $4 = StringReplace($3,"4","") $5 = StringReplace($4,"5","") $6 = StringReplace($5,"6","") $7 = StringReplace($6,"7","") $8 = StringReplace($7,"8","") $8 = StringReplace($8,"9","") $3dnum = $8 $0 = StringReplace($split[4],"0","") $1 = StringReplace($0,"1","") $2 = StringReplace($1,"2","") $3 = StringReplace($2,"3","") $4 = StringReplace($3,"4","") $5 = StringReplace($4,"5","") $6 = StringReplace($5,"6","") $7 = StringReplace($6,"7","") $8 = StringReplace($7,"8","") $8 = StringReplace($8,"9","") $4thnum = $8 if $1stnum <> "" Then return "Please Enter an Correct IP address Found string in [ ???.***.***.*** ]" ElseIf $2dnum <> "" Then return "Please Enter an Correct IP address Found string in [ ***.???.***.*** ]" ElseIf $3dnum <> "" Then return "Please Enter an Correct IP address Found string in [ ***.***.???.*** ]" ElseIf $4thnum <> "" Then return "Please Enter an Correct IP address Found string in [ ***.***.***.??? ]" ElseIf $1stnum = "" and $2dnum = "" and $3dnum = "" and $4thnum = "" Then if $split[1] > 254 Then return "Please Enter an number less than 255 [ ???.***.***.*** ]" ElseIf $split[2] > 254 Then return "Please Enter an number less than 255 [ ***.???.***.*** ]" ElseIf $split[3] > 254 Then return "Please Enter an number less than 255 [ ***.***.???.*** ]" ElseIf $split[4] > 254 Then return "Please Enter an number less than 255 [ ***.***.***.??? ]" Else $len1 = StringLen($split[1]) $len2 = StringLen($split[2]) $len3 = StringLen($split[3]) $len4 = StringLen($split[4]) If $len1 > 1 and StringLeft($split[1],1) = "0" Then return "Please Enter an Correct number [ 0??.***.***.*** ]" ElseIf $len2 > 1 and StringLeft($split[2],1) = "0" Then return "Please Enter an Correct number [ ***.0??.***.*** ]" ElseIf $len3 > 1 and StringLeft($split[3],1) = "0" Then return "Please Enter an Correct number [ ***.***.0??.*** ]" ElseIf $len4 > 1 and StringLeft($split[4],1) = "0" Then return "Please Enter an Correct number [ ***.***.***.0?? ]" Else Return True EndIf EndIf EndIf Else MsgBox("","","Please Enter an Correct IP address Like [ ***.***.***.*** ]") EndIf EndFunc
Solution BrewManNH Posted September 4, 2013 Solution Posted September 4, 2013 Here's something I came up with a while ago that might help. expandcollapse popup; FUNCTION# =========================================================================================================== ; Name...........: _ValidIP ; Description ...: Verifies whether an IP address is a valid IPv4 address or not ; Syntax.........: _ValidIP($sIP) ; Parameters ....: $sIP - IP address to validate ; ; Return values .: Success - Array containing split IP Address, IP address in Hex, and the Class of the IP address ; array[0] - [3] = the IP address split into octets ; array[4] = IP address in Hex ; array[5] = Class of the IP address [A through D] ; Failure - -1, sets @error ; |1 - IP address starts with an invalid number = 0, 127 , 169 or is > 239 ; |2 - one of the octets of the IP address is out of the range 0-255 or contains invalid characters ; |3 - IP Address is not a valid dotted IP address (ex. valid address 190.40.100.20) ; |4 - Last octet ends in 0 or 255 which are invalid for an IP address ; Author ........: BrewManNH ; Modified.......: ; Remarks .......: This will accept an IP address that is 4 octets long, and contains only numbers and falls within ; valid IP address values. Class A networks can't start with 0 or 127. 169.xx.xx.xx is reserved and is ; invalid and any address that starts above 239, ex. 240.xx.xx.xx is reserved. The address range ; 224-239 1s reserved as well for Multicast groups but can be a valid IP address range if you're using ; it as such. Any IP address ending in 0 or 255 is also invalid for an IP ; Related .......: ; Link ..........: ; Example .......: Yes ; ===================================================================================================================== Func _ValidIP($sIP) Local $adIPAddressInfo[6] Local $aArray = StringSplit($sIP, ".", 2) If Not IsArray($aArray) Or UBound($aArray) <> 4 Then Return SetError(3, 0, -1) Local $dString = "0x" If $aArray[0] <= 0 Or $aArray[0] > 239 Or $aArray[0] = 127 Or $aArray[0] = 169 Then Return SetError(1, 0, -1) EndIf For $I = 0 To 3 If $I < 3 Then If $aArray[$I] < 0 Or $aArray[$I] > 255 Or Not StringIsDigit($aArray[$I]) Then Return SetError(2, 0, -1) EndIf Else If Not StringIsDigit($aArray[$I]) Then Return SetError(2, 0, -1) EndIf If $aArray[$I] < 1 Or $aArray[$I] > 254 Then Return SetError(4, 0, -1) EndIf EndIf $dString &= StringRight(Hex($aArray[$I]), 2) $adIPAddressInfo[$I] = $aArray[$I] Next $adIPAddressInfo[4] = $dString Switch $aArray[0] Case 1 To 126 $adIPAddressInfo[5] = "A" Return $adIPAddressInfo Case 128 To 191 $adIPAddressInfo[5] = "B" Return $adIPAddressInfo Case 192 To 223 $adIPAddressInfo[5] = "C" Return $adIPAddressInfo Case 224 To 239 $adIPAddressInfo[5] = "D" Return $adIPAddressInfo EndSwitch EndFunc ;==>_ValidIP If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator
ahmed9100 Posted September 4, 2013 Author Posted September 4, 2013 That is a very good one thx brewManNH
BrewManNH Posted September 4, 2013 Posted September 4, 2013 You can find a couple others like it on this page. I wouldn't use the _IsIP one though if you're trying to determine if it's a valid IP, as that one only determines whether or not you sent 4 digits separated by dots that are all between 0 and 255. If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator
ahmed9100 Posted September 4, 2013 Author Posted September 4, 2013 thx again brewManNH i have tried RegExp but i cant understand it from help because im not so good in english
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now