Προσπαθώ να φτιάξω ένα ολοκληρωμένο regex για την επικύρωση τηλεφωνικών αριθμών. Ιδανικά θα μπορούσε να χειριστεί διεθνείς μορφές, αλλά πρέπει να χειριστεί αμερικανικές μορφές, συμπεριλαμβανομένων των ακόλουθων:
Θα απαντήσω με την τρέχουσα προσπάθειά μου, αλλά ελπίζω ότι κάποιος έχει κάτι καλύτερο ή/και πιο κομψό.
Αποδεικνύεται ότι υπάρχει κάτι σαν προδιαγραφή γι' αυτό, τουλάχιστον για τη Βόρεια Αμερική, που ονομάζεται NANP.
Πρέπει να προσδιορίσετε ακριβώς τι θέλετε. Ποια είναι τα νόμιμα διαχωριστικά; Διαστήματα, παύλες και τελείες; Δεν επιτρέπεται κανένα διαχωριστικό; Μπορείτε να συνδυάσετε διαχωριστικά (π.χ. +0.111-222.3333); Πώς θα αντιμετωπιστούν οι επεκτάσεις (π.χ. 111-222-3333 x 44444); Τι γίνεται με τους ειδικούς αριθμούς, όπως το 911; Ο κωδικός περιοχής θα είναι προαιρετικός ή υποχρεωτικός;
Ακολουθεί ένα regex για έναν 7- ή 10ψήφιο αριθμό, με επιτρεπόμενες επεκτάσεις, με διαχωριστικά κενά, παύλες ή τελείες:
^(?:(?:\+?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;
Η εισαγωγή του αριθμού τηλεφώνου των ΗΠΑ έφερε πίσω μια λίστα με πολλές δυνατότητες.
Εδώ είναι η καλύτερη προσπάθειά μου μέχρι στιγμής. Χειρίζεται τις παραπάνω μορφές, αλλά είμαι σίγουρος ότι μου λείπουν κάποιες άλλες πιθανές μορφές.
^\d?(?:(?:[\+]?(?:[\d]{1,3}(?:[ ]+|[\-.])))?[(]?(?:[\d]{3})[\-/)]?(?:[ ]+)?)?(?:[a-zA-Z2-9][a-zA-Z0-9 \-.]{6,})(?:(?:[ ]+|[xX]|(i:ext[\.]?)){1,2}(?:[\d]{1,5}))?$