Bandau sukurti išsamią regeksą telefono numeriams patvirtinti. Geriausia būtų, jei ji tvarkytų tarptautinius formatus, tačiau ji turi tvarkyti ir JAV formatus, įskaitant šiuos:
Atsakysiu savo dabartiniu bandymu, bet tikiuosi, kad kas nors turi ką nors geresnio ir (arba) elegantiškesnio.
Pasirodo, kad bent jau Šiaurės Amerikoje yra tam tikra specifikacija, vadinama NANP.
Reikia tiksliai nurodyti, ko norite. Kokie yra teisėti riboženkliai? Tarpai, brūkšneliai ir taškai? Neleidžiama naudoti jokių skiriamųjų ženklų? Ar galima maišyti skirtukus (pvz., +0.111-222.3333)? Kaip bus elgiamasi su plėtiniais (pvz., 111-222-3333 x 44444)? Kaip elgtis su specialiaisiais numeriais, pavyzdžiui, 911? Ar vietovės kodas bus neprivalomas, ar privalomas?
Čia pateikiame 7 arba 10 skaitmenų numerio regeksą, kuriame leidžiami plėtiniai, o riboženkliai yra tarpai, brūkšneliai arba taškai:
^(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$
Ar esate peržiūrėję RegExLib?
Įvedus JAV telefono numerį, buvo pateiktas nemažas galimybių sąrašas.
Štai mano geriausias bandymas iki šiol. Jis apdoroja pirmiau minėtus formatus, bet esu tikras, kad man trūksta kai kurių kitų galimų formatų.
^\d?(?:(?:[\+]?(?:[\d]{1,3}(?:[ ]+|[\-.])))?[(]?(?:[\d]{3})[\-/)]?(?:[ ]+)?)?(?:[a-zA-Z2-9][a-zA-Z0-9 \-.]{6,})(?:(?:[ ]+|[xX]|(i:ext[\.]?)){1,2}(?:[\d]{1,5}))?$