#include <StringConstants.au3> ; to declare the Constants of StringRegExp
#include <Array.au3> ; UDF needed for _ArrayDisplay and _ArrayConcatenate
Local $sRegex = "(?mxi)^" & @CRLF & _
"(?:" & @CRLF & _
" (?:\+|00|011)[\.\/\-\ \t]*" & @CRLF & _
" (?# group 1: country code after international dialing code)" & @CRLF & _
" ([17]|2(?:[07]|[1-689]\d)|3(?:[0-4679]|[578]\d)|4(?:[013-9]|2\d)|5(?:[1-8]|[09]\d)|6(?:[0-6]|[789]\d)|8(?:[1246]|[035789]\d)|9(?:[0-58]|[679]\d))" & @CRLF & _
" [\.\/\-\ \t]*" & @CRLF & _
"| (?# group 2: single-digit country code without international dialing code)" & @CRLF & _
" ([17])" & @CRLF & _
" [\.\/\-\ \t]+(?# a separator is required for disambiguation)" & @CRLF & _
")?" & @CRLF & _
"(?# group 3: area code between parentheses, optional)" & @CRLF & _
"(?:\((\d{1,4})\)[\.\/\-\ \t]*)?" & @CRLF & _
"(?# groups 4-7: leading groups of digits, may be empty)" & @CRLF & _
"(?:(\d{1,6})[\.\/\-\ ])?" & @CRLF & _
"(?:(\d{1,6})[\.\/\-\ ])?" & @CRLF & _
"(?:(\d{1,6})[\.\/\-\ ])?" & @CRLF & _
"(?:(\d{1,6})[\.\/\-\ ])?" & @CRLF & _
"(?# group 8: start of the last group of digits, may be empty)" & @CRLF & _
"(\d{0,10}?)" & @CRLF & _
"(?# group 9: up to 4 digits at end of the last group of digits)" & @CRLF & _
"(\d{1,4}+)" & @CRLF & _
"(?:" & @CRLF & _
" [\.\/\-;\ \t]*e?xt?[\.\/\-=\ \t]*+" & @CRLF & _
" (?# group 10: extension code, optional)" & @CRLF & _
" (\d{1,14})" & @CRLF & _
")?" & @CRLF & _
"$"
Local $sString = "All valid numbers should have a non-empty group 9 for the last digits (before extension):" & @CRLF & _
"" & @CRLF & _
"+1(234)567 8901" & @CRLF & _
"+1 234 567 8901" & @CRLF & _
"+1-234-567-8901" & @CRLF & _
"+1-234-567-8901" & @CRLF & _
"+1.234.567.8901" & @CRLF & _
"+1/234/567/8901" & @CRLF & _
"+7-123-456-7890" & @CRLF & _
"+7(123)4567890" & @CRLF & _
"+27-31-707-1700" & @CRLF & _
"+27-84-820-0365" & @CRLF & _
"+261-23-456-7890" & @CRLF & _
"+212 (34) 567-8901" & @CRLF & _
"+34123456789" & @CRLF & _
"+34 1 23 45 67 89" & @CRLF & _
"+34 123 456 789" & @CRLF & _
"+39 0577286143" & @CRLF & _
"+44(012)123456789" & @CRLF & _
"+49 (1234) 567890" & @CRLF & _
"+49 211 828934-0" & @CRLF & _
"+49 69 96876-150" & @CRLF & _
"" & @CRLF & _
"1-234-555-8901" & @CRLF & _
"7-123-456-7890" & @CRLF & _
"" & @CRLF & _
"0012315557890" & @CRLF & _
"001 230 123 456789" & @CRLF & _
"001-555012345" & @CRLF & _
"00210123456789" & @CRLF & _
"00271-12-345-6789" & @CRLF & _
"003312345678" & @CRLF & _
"009112345678" & @CRLF & _
"008001234567890" & @CRLF & _
"" & @CRLF & _
"With an extension:" & @CRLF & _
"" & @CRLF & _
"+12345678901x1234" & @CRLF & _
"+1-234-567-8901 x1234" & @CRLF & _
"+7 123-4567890-x321" & @CRLF & _
"+7 123 4 5 6-7890x1234" & @CRLF & _
"+7-123-456-7890 ext 1234" & @CRLF & _
"+33(1)23.45.67.89 x 1234" & @CRLF & _
"+9123-456-7890x12345" & @CRLF & _
"+9123-456-7890;ext=12345" & @CRLF & _
"+91-92130-25552" & @CRLF & _
"" & @CRLF & _
"01172312345678x901" & @CRLF & _
"011 7 231 234 5678 ext. 901" & @CRLF & _
"011 7 231 234 5678;ext=901" & @CRLF & _
"" & @CRLF & _
"0091234567890x1234" & @CRLF & _
"0011234567890ext.1234" & @CRLF & _
"00223-(4321)-567.89 ext-4321" & @CRLF & _
"007-(123)-456-7890 ext 4321" & @CRLF & _
"007-(123)-456-7890;ext=4321" & @CRLF & _
"" & @CRLF & _
"Local numbers only (or missing/unknown country code):" & @CRLF & _
"" & @CRLF & _
"(800)5678901" & @CRLF & _
"(800) 567 8901" & @CRLF & _
"(234) 567 8901" & @CRLF & _
"(234) 567 89 01" & @CRLF & _
"(1)23 45 67 89" & @CRLF & _
"(01)23 45 67 89" & @CRLF & _
"(0)1 23 45 67 89" & @CRLF & _
"(0)1 23 45 6789" & @CRLF & _
"(0)800 800 800" & @CRLF & _
"(0)800 800 800;ext=12" & @CRLF & _
"" & @CRLF & _
"800-567-8901" & @CRLF & _
"234-567-8901" & @CRLF & _
"234 567 8901" & @CRLF & _
"" & @CRLF & _
"01 23 45 67 89" & @CRLF & _
"01 23 45 6789" & @CRLF & _
"0 800 800 800" & @CRLF & _
"00-0-0000" & @CRLF & _
"" & @CRLF & _
"123456789" & @CRLF & _
"123456789012" & @CRLF & _
"12345678901" & @CRLF & _
"2345678901" & @CRLF & _
"12345678" & @CRLF & _
"1234567890123" & @CRLF & _
"" & @CRLF & _
"Local short numbers (up to 4 digits):" & @CRLF & _
"" & @CRLF & _
"12 34" & @CRLF & _
"1234" & @CRLF & _
"112" & @CRLF & _
"911" & @CRLF & _
"15" & @CRLF & _
"" & @CRLF & _
"Ambiguous or invalid format:" & @CRLF & _
"" & @CRLF & _
"00-0--0000" & @CRLF & _
"(01 55) 1234 5678" & @CRLF & _
"(01 551) 234 5678" & @CRLF & _
"+012345678" & @CRLF & _
" +340123456789" & @CRLF & _
"++34123456789" & @CRLF & _
" (0)123456789" & @CRLF & _
"12(34567890" & @CRLF & _
"123)456789012345" & @CRLF & _
")234( 567 8901" & @CRLF & _
"ext1234" & @CRLF & _
""
Local $aArray = StringRegExp($sString, $sRegex, $STR_REGEXPARRAYGLOBALFULLMATCH)
Local $aFullArray[0]
For $i = 0 To UBound($aArray) -1
_ArrayConcatenate($aFullArray, $aArray[$i])
Next
$aArray = $aFullArray
; Present the entire match result
_ArrayDisplay($aArray, "Result")
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for AutoIt, please visit: https://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm