dannydy Posted April 23, 2013 Share Posted April 23, 2013 Hi, i've created a simple program, asking user to enter his/her email address, e.g dannyd_y@hotmail.com Or user can enter multiple email addresses, dannyd_y@hotmail.com;dannyd_yq@yahoo.com. Func mainlobby() Global $msg, $receiver local $sendemilbutton,$recipientsread,$recipientsenter GUICreate($toolname,$width, $height, 500, 250, -1, $WS_EX_ACCEPTFILES) ; will create a dialog box that when displayed is centered GUISetBkColor(0x6666FF) $recipientsenter = GUICtrlCreateInput("", 10, 5, 250, 20) $sendemilbutton = GUICtrlCreateButton("Send Email", 230, 128, 70, 25,-1,0x00000001) GUISetState(@SW_SHOW) do $msg = GUIGetMsg() Select Case $msg = $sendemilbutton if GUICtrlRead($recipientsenter) ="" Then msgbox(16,"Email Not Input","Cannot Find Any Email") Else msgbox(0,"Email Input",GUICtrlRead($recipientsenter)) $receiver = GUICtrlRead($recipientsenter) CreateMailItem() EndIf EndSelect Until $msg = $GUI_EVENT_CLOSE GUIDelete() _Exit() EndFunc How do i validate if user is entering the right format. i've made some studies on this it seems like the right way of coding is using StringRegExp, but i coudlnt understand the regular expression pattern at all. Appreciate someone can help me. Many Thanks. Link to comment Share on other sites More sharing options...
kylomas Posted April 23, 2013 Share Posted April 23, 2013 dannydy, You might do something like this (not tested) expandcollapse popupFunc mainlobby() Global $msg, $receiver Local $sendemilbutton, $recipientsread, $recipientsenter, $aEmail GUICreate($toolname, $width, $height, 500, 250, -1, $WS_EX_ACCEPTFILES) ; will create a dialog box that when displayed is centered GUISetBkColor(0x6666FF) $recipientsenter = GUICtrlCreateInput("", 10, 5, 250, 20) $sendemilbutton = GUICtrlCreateButton("Send Email", 230, 128, 70, 25, -1, 0x00000001) GUISetState(@SW_SHOW) Do $msg = GUIGetMsg() Select Case $msg = $sendemilbutton If GUICtrlRead($recipientsenter) = "" Then MsgBox(16, "Email Not Input", "Cannot Find Any Email") Else MsgBox(0, "Email Input", GUICtrlRead($recipientsenter)) $receiver = GUICtrlRead($recipientsenter) ; start added code $aEmail = stringsplit($receiver,';') for $1 = 1 to $aEmail[0] if stringregexp($aEmail[$1],'^[\_]*([a-z0-9]+(\.|\_*)?)+@([a-z][a-z0-9\-]+(\.|\-*\.))+[a-z]{2,6}$',0) = 1 then CreateMailItem() Else guictrlsetdata($recipientsenter,$aEmail[$1] & ' in error - not sent') EndIf next ; end added code EndIf EndSelect Until $msg = $GUI_EVENT_CLOSE GUIDelete() _Exit() EndFunc ;==>mainlobby The regexp was found using GOOGLE search. You don't really need to understand it to use it (although better if you do, obviously). kylomas Xandy and dannydy 2 Forum Rules Procedure for posting code "I like pigs. Dogs look up to us. Cats look down on us. Pigs treat us as equals." - Sir Winston Churchill Link to comment Share on other sites More sharing options...
Xandy Posted April 23, 2013 Share Posted April 23, 2013 kylomas example reworked slightly to run without modification. expandcollapse popup#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> mainlobby() Func mainlobby() Global $msg, $receiver Local $sendemilbutton, $recipientsread, $recipientsenter, $aEmail $toolname= "abc" $width= 320 $height= 200 GUICreate($toolname, $width, $height, 500, 250, default, $WS_EX_ACCEPTFILES) ; will create a dialog box that when displayed is centered GUISetBkColor(0x6666FF) $recipientsenter = GUICtrlCreateInput("", 10, 5, 250, 20) $sendemilbutton = GUICtrlCreateButton("Send Email", 230, 128, 70, 25, -1, 0x00000001) GUISetState(@SW_SHOW) Do $msg = GUIGetMsg() Select Case $msg = $sendemilbutton If GUICtrlRead($recipientsenter) = "" Then MsgBox(16, "Email Not Input", "Cannot Find Any Email") Else MsgBox(0, "Email Input", GUICtrlRead($recipientsenter)) $receiver = GUICtrlRead($recipientsenter) ; start added code $aEmail = stringsplit($receiver,';') for $1 = 1 to $aEmail[0] if stringregexp($aEmail[$1],'^[\_]*([a-z0-9]+(\.|\_*)?)+@([a-z][a-z0-9\-]+(\.|\-*\.))+[a-z]{2,6}$',0) = 1 then ;CreateMailItem() Else guictrlsetdata($recipientsenter,$aEmail[$1] & ' in error - not sent') EndIf next ; end added code EndIf EndSelect Until $msg = $GUI_EVENT_CLOSE GUIDelete() ;_Exit() EndFunc ;==>mainlobby dannydy 1 Human Male Programmer (-_-) Xandy About (^o^) Discord - Xandy Programmer MapIt (Tile world editor, Image Tile Extractor, and Game Maker) Link to comment Share on other sites More sharing options...
dannydy Posted April 23, 2013 Author Share Posted April 23, 2013 Many Thanks both of you(kylomas and Xandy). Its working fine, however if i entered one email address, the program threw me an error on that. its only worked on multiple email addresses. i'm working on it right now, make some modification will handle it. Really appreciate that save me a lot of time:) Xandy 1 Link to comment Share on other sites More sharing options...
dannydy Posted April 23, 2013 Author Share Posted April 23, 2013 i found the issue, my company address has this hyphen "-". So if i enter any email address with hypen(i.e danny-dy@hotmail.com), it will throw me an error. How to i modify the coding to handle hyphen. i did several trial and error, but i couldn't get it right. This is the expression for handling underscore stringregexp($aEmail[$1],'^[\_]*([a-z0-9]+(\.|\_*)?)+@([a-z][a-z0-9\-]+(\.|\-*\.))+[a-z]{2,6}$',0) This is the expression for handling hyphen stringregexp($aEmail[$1],'^[\-]*([a-z0-9]+(\.|\-*)?)+@([a-z][a-z0-9\-]+(\.|\-*\.))+[a-z]{2,6}$',0) How do i make them into one statement, please? Link to comment Share on other sites More sharing options...
Xandy Posted April 23, 2013 Share Posted April 23, 2013 Sorry I don't know stringregexp() formatting well enough (at all really) to try to write one without getting very frustrated. I would do something like use stringinstr() to find a '@', make sure it was not the first character. Is there always a '.' after the '@'? I don't know. Doing it this way would not be that many lines, but it would not be one line. You could smash it into a function though. I could write it pretty easy, would you like me to do it? dannydy 1 Human Male Programmer (-_-) Xandy About (^o^) Discord - Xandy Programmer MapIt (Tile world editor, Image Tile Extractor, and Game Maker) Link to comment Share on other sites More sharing options...
dannydy Posted April 23, 2013 Author Share Posted April 23, 2013 Xandy, with luck i managed to do it. Here's the code stringregexp($aEmail[$1],'^[\_|[color=#ff0000][b]\-[/b][/color]]*([a-z0-9]+(\.|\_|[color=#ff0000][b]\-[/b][/color]*)?)+@([a-z][a-z0-9\-]+(\.|\-*\.))+[a-z]{2,6}$',0) Basically i added - in the statement(Highlighted in red). Many Thanks for taken a loop into it. Xandy 1 Link to comment Share on other sites More sharing options...
PhoenixXL Posted April 23, 2013 Share Posted April 23, 2013 (edited) you can check the syntax of an Email.The Regex would match most of it, excluding the special chars, U+007F above chars IP address domain name and comments.That's the general syntax many email providers allow only a few chars other than alphanum.Use a Case-Insensitivity switch(?i), for matching upper-case chars.Edit: I tried to simplify the regexexpandcollapse popup#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> mainlobby() Func mainlobby() Global $msg, $receiver Local $sendemilbutton, $recipientsread, $recipientsenter, $aEmail $width = 320 $height = 200 GUICreate('', 320, 200, 500, 250) $recipientsenter = GUICtrlCreateInput("", 10, 5, 250, 20) $sendemilbutton = GUICtrlCreateButton("Send Email", 230, 128, 70, 25, 1) GUISetState() Do $msg = GUIGetMsg() Select Case $msg = $sendemilbutton If GUICtrlRead($recipientsenter) = "" Then MsgBox(16, "Email Not Input", "Cannot Find Any Email") Else ; start added code $aEmail = StringSplit(GUICtrlRead($recipientsenter), ';') $localpart = "[[:alnum:]!#$%&'*+-/=?^_`{|}~.]+" $domainname = "[[:alnum:].-]+\.[[:alnum:]]+" For $1 = 1 To $aEmail[0] If StringRegExp($aEmail[$1], '(?i)^(' & $localpart & ')@(' & $domainname & ')$', 0) Then ConsoleWrite("Email_" & $1 & " is valid" & @CRLF) Else MsgBox(0, "Error", "Email " & $1 & " is not valid") EndIf Next ; end added code EndIf EndSelect Until $msg = $GUI_EVENT_CLOSE GUIDelete() EndFunc ;==>mainlobbyThe limitations are still the sameRegards Edited April 23, 2013 by PhoenixXL Xandy and dannydy 2 My code: PredictText: Predict Text of an Edit Control Like Scite. Remote Gmail: Execute your Scripts through Gmail. StringRegExp:Share and learn RegExp.Run As System: A command line wrapper around PSEXEC.exe to execute your apps scripts as System (LSA). Database: An easier approach for _SQ_LITE beginners. MathsEx: A UDF for Fractions and LCM, GCF/HCF. FloatingText: An UDF for make your text floating. Clipboard Extendor: A clipboard monitoring tool. Custom ScrollBar: Scroll Bar made with GDI+, user can use bitmaps instead. RestrictEdit_SRE: Restrict text in an Edit Control through a Regular Expression. Link to comment Share on other sites More sharing options...
guinness Posted April 23, 2013 Share Posted April 23, 2013 I'm sure there is something on RegExLib. UDF List: _AdapterConnections() • _AlwaysRun() • _AppMon() • _AppMonEx() • _ArrayFilter/_ArrayReduce • _BinaryBin() • _CheckMsgBox() • _CmdLineRaw() • _ContextMenu() • _ConvertLHWebColor()/_ConvertSHWebColor() • _DesktopDimensions() • _DisplayPassword() • _DotNet_Load()/_DotNet_Unload() • _Fibonacci() • _FileCompare() • _FileCompareContents() • _FileNameByHandle() • _FilePrefix/SRE() • _FindInFile() • _GetBackgroundColor()/_SetBackgroundColor() • _GetConrolID() • _GetCtrlClass() • _GetDirectoryFormat() • _GetDriveMediaType() • _GetFilename()/_GetFilenameExt() • _GetHardwareID() • _GetIP() • _GetIP_Country() • _GetOSLanguage() • _GetSavedSource() • _GetStringSize() • _GetSystemPaths() • _GetURLImage() • _GIFImage() • _GoogleWeather() • _GUICtrlCreateGroup() • _GUICtrlListBox_CreateArray() • _GUICtrlListView_CreateArray() • _GUICtrlListView_SaveCSV() • _GUICtrlListView_SaveHTML() • _GUICtrlListView_SaveTxt() • _GUICtrlListView_SaveXML() • _GUICtrlMenu_Recent() • _GUICtrlMenu_SetItemImage() • _GUICtrlTreeView_CreateArray() • _GUIDisable() • _GUIImageList_SetIconFromHandle() • _GUIRegisterMsg() • _GUISetIcon() • _Icon_Clear()/_Icon_Set() • _IdleTime() • _InetGet() • _InetGetGUI() • _InetGetProgress() • _IPDetails() • _IsFileOlder() • _IsGUID() • _IsHex() • _IsPalindrome() • _IsRegKey() • _IsStringRegExp() • _IsSystemDrive() • _IsUPX() • _IsValidType() • _IsWebColor() • _Language() • _Log() • _MicrosoftInternetConnectivity() • _MSDNDataType() • _PathFull/GetRelative/Split() • _PathSplitEx() • _PrintFromArray() • _ProgressSetMarquee() • _ReDim() • _RockPaperScissors()/_RockPaperScissorsLizardSpock() • _ScrollingCredits • _SelfDelete() • _SelfRename() • _SelfUpdate() • _SendTo() • _ShellAll() • _ShellFile() • _ShellFolder() • _SingletonHWID() • _SingletonPID() • _Startup() • _StringCompact() • _StringIsValid() • _StringRegExpMetaCharacters() • _StringReplaceWholeWord() • _StringStripChars() • _Temperature() • _TrialPeriod() • _UKToUSDate()/_USToUKDate() • _WinAPI_Create_CTL_CODE() • _WinAPI_CreateGUID() • _WMIDateStringToDate()/_DateToWMIDateString() • Au3 script parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018 Link to comment Share on other sites More sharing options...
water Posted April 23, 2013 Share Posted April 23, 2013 Very helpful RegExLib is a website. Take this as a starter. Xandy 1 My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki Link to comment Share on other sites More sharing options...
jchd Posted April 23, 2013 Share Posted April 23, 2013 What makes an email address "valid" is very complex in practice. Already at the email client level, what is considered valid is variable based on actual client, setup and network context. Then relays have to adhere to the same validity set of rules which is hardly the case. Finally the recipient host also has to consider valid the local part the same way as you did. This is one of the most complex routine task in IT and I don't believe it can be done unconditionnally from a blind end. Even if the practice is doubtful (due to overload of the servers) I regard asking SMTP the most reliable approach (or the less prone to failure). Of course that means you have access to a (the!) SMTP server on the machine the validation is running on. I don't know of any online service working correctly. Xandy 1 This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe hereRegExp tutorial: enough to get startedPCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta. SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt) Link to comment Share on other sites More sharing options...
water Posted April 23, 2013 Share Posted April 23, 2013 (edited) If the user runs Outlook you could use my OutlookEX UDF to validate the mail address. Edited April 23, 2013 by water My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki Link to comment Share on other sites More sharing options...
jchd Posted April 23, 2013 Share Posted April 23, 2013 Yeah or a hidden telnet (more ubiquitous) going thru until answer to RCPT TO: command. This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe hereRegExp tutorial: enough to get startedPCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta. SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt) Link to comment Share on other sites More sharing options...
dannydy Posted April 23, 2013 Author Share Posted April 23, 2013 Guys, Many Thanks for the sharing. I've learnt much. Link to comment Share on other sites More sharing options...
water Posted April 23, 2013 Share Posted April 23, 2013 My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki Link to comment Share on other sites More sharing options...
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