Telefon numaralarını doğrulamak için kapsamlı bir regex oluşturmaya çalışıyorum. İdeal olarak uluslararası formatları işleyecektir, ancak aşağıdakiler de dahil olmak üzere ABD formatlarını işlemesi gerekir:
Şu anki girişimimle cevap vereceğim, ancak birilerinin daha iyi ve/veya daha zarif bir şey bulmasını umuyorum.
Bunun için en azından Kuzey Amerika için NANP adı verilen bir spesifikasyon olduğu ortaya çıktı.
Tam olarak ne istediğinizi belirtmeniz gerekir. Yasal sınırlayıcılar nelerdir? Boşluklar, çizgiler ve noktalar? Hiçbir sınırlayıcıya izin verilmiyor mu? Sınırlayıcılar karıştırılabilir mi (örneğin, +0.111-222.3333)? Uzantılar (örn. 111-222-3333 x 44444) nasıl ele alınacak? 911 gibi özel numaralar ne olacak? Alan kodu isteğe bağlı mı yoksa zorunlu mu olacak?
İşte 7 veya 10 basamaklı bir sayı için bir regex, uzantılara izin verilir, sınırlayıcılar boşluk, tire veya noktadır:
^(?:(?:\+?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+))?$
RegExLib]1'e bir göz attınız mı?
ABD telefon numarasını girdiğinizde karşınıza pek çok olasılık çıkıyor.
İşte şimdiye kadarki en iyi denemem. Yukarıdaki formatları işliyor ama eminim başka olası formatları kaçırıyorumdur.
^\d?(?:(?:[\+]?(?:[\d]{1,3}(?:[ ]+|[\-.])))?[(]?(?:[\d]{3})[\-/)]?(?:[ ]+)?)?(?:[a-zA-Z2-9][a-zA-Z0-9 \-.]{6,})(?:(?:[ ]+|[xX]|(i:ext[\.]?)){1,2}(?:[\d]{1,5}))?$