$("#phone_mask").change(function() ( if ($("#phone_mask").is(":checked")) ($("#customer_phone").inputmasks(maskOpts); ) else ($ ("#customer_phone").inputmask("+[####################]", maskOpts.inputmask) .attr("placeholder", $("# customer_phone").inputmask("getemptymask")); $("#descr").html("Μάσκα εισαγωγής"); ) ));
Ένας σωστά γραμμένος αριθμός τηλεφώνου βοηθά τον πελάτη ή τον φίλο σας να τα βγάλει πέρα χωρίς ταλαιπωρία. Αν ενδιαφέρεστε για το πώς θα σας αναζητήσει κάποιος, δώστε προσοχή σε αυτό το θέμα. Ρεκόρ αριθμοί τηλεφώνουέχει αλλάξει για περισσότερα από εκατό χρόνια από την εφεύρεση του τηλεφώνου, όπως και οι ίδιοι οι αριθμοί (για παράδειγμα, μέχρι το 1968, οι αριθμοί τηλεφώνου στην ΕΣΣΔ γράφονταν με γράμματα).
Εν συντομία σχετικά με την καταγραφή ρωσικών αριθμών Ας πάμε βαθύτερα. Από πού να ξεκινήσετε τον αριθμό; +7 ή 8Η καταγραφή ρωσικών (και, παρεμπιπτόντως, Καζακικών και Αμπχαζιανών) αριθμών ξεκινά με τον κωδικό χώρας: +7. Η Ρωσία και το Καζακστάν κληρονόμησαν τα επτά από την ΕΣΣΔ (το ξέρατε διεθνής κωδικόςΗ ΕΣΣΔ ήταν +7;). Και το οκτώ είναι ο κωδικός πρόσβασης μεγάλων αποστάσεων που υιοθετήθηκε στην ΕΣΣΔ, τον οποίο εξακολουθούμε να χρησιμοποιούμε σε σταθερά τηλέφωνα. Για διεθνείς κλήσεις από σταθεράκαλούμε 8 10. Οι κανόνες πρόσβασης σε μια διεθνή γραμμή είναι διαφορετικοί σε όλες τις χώρες:
Δηλαδή, όταν γράφετε τον αριθμό με ένα οκτώ, θα πρέπει να εξηγήσετε στον αλλοδαπό ότι, πρώτα, πρέπει να τηλεφωνήσει στη Ρωσία (και όχι στο Βιετνάμ ή Νότια Κορέα, του οποίου οι αριθμοί τηλεφώνου αρχίζουν με οκτώ), δεύτερον, ότι δεν χρειάζεται να καλέσει καθόλου το οκτώ, αλλά αντί να καλέσει επτά.
Επίσης, δεν θα μπορείτε να καλέσετε το σπίτι από το εξωτερικό πληκτρολογώντας έναν αριθμό χρησιμοποιώντας τον αριθμό οκτώ. Γι' αυτό στο δικό μου σημειωματάριοΞεκινάω τους αριθμούς με τον κωδικό χώρας.
Είναι ενδιαφέρον ότι στη Λευκορωσία (και σε ορισμένες άλλες χώρες της πρώην Ένωσης) διατηρήθηκε επίσης η αρχή της υπεραστικής πρόσβασης που υπήρχε στην ΕΣΣΔ. Δηλαδή, ο ιδιοκτήτης ενός διαδικτυακού καταστήματος της Λευκορωσίας που υπέδειξε τον αριθμό μετά το οκτώ θα δυσκολέψει τη ζωή των πιθανών πελατών του από τη Ρωσία. Απλώς δεν θα μπορούν να περάσουν εκτός εάν σημειώσουν ότι το κατάστημα βρίσκεται σε άλλη χώρα. Τι πρέπει να κάνω; Ξεκινήστε τον αριθμό με τον κωδικό χώρας:
Πού να βάλω παρενθέσεις σε έναν αριθμό τηλεφώνου;Αυτό το πρόσθετογια το jQuery σάς επιτρέπει να επιλέξετε αυτόματα μια κατάλληλη μάσκα εισαγωγής με βάση την αρχή που εισάγατε στον αριθμό τηλεφώνου. Αυτό σας επιτρέπει να κάνετε την εισαγωγή ενός αριθμού τηλεφώνου σε μια σελίδα ιστότοπου πιο γρήγορη και χωρίς σφάλματα. Επιπλέον, το ανεπτυγμένο πρόσθετο μπορεί να χρησιμοποιηθεί σε άλλες περιοχές, εάν οι κανόνες εισαγωγής μπορούν να αναπαρασταθούν με τη μορφή πολλών μασκών εισαγωγής.
Εισαγωγή Οι τοποθεσίες Web απαιτούν την εισαγωγή πληροφοριών αριθμού τηλεφώνου. Έτυχε κάθε χώρα να έχει το δικαίωμα να θεσπίσει τους δικούς της κανόνες κλήσης και μήκος αριθμού, με αποτέλεσμα μεταξύ των κατοίκων διαφορετικές χώρεςΑπό καιρό σε καιρό, δημιουργείται σύγχυση: ορισμένοι συνηθίζουν να υποδεικνύουν τον αριθμό με το πρώτο ψηφίο 8, άλλοι με το πρώτο ψηφίο 0 και άλλοι με το σύμβολο + Ανασκόπηση των υπαρχουσών λύσεων, προκειμένου να επιλυθεί με κάποιο τρόπο η πολυπλοκότητα που έχει προκύψει και φέρτε τους αριθμούς σε ενοποιημένη μορφή, υπάρχουν 3 κύριες λύσεις:Λαμβάνοντας υπόψη το γεγονός ότι ο αριθμός των χωρών στον κόσμο είναι σχετικά μικρός, αποφασίστηκε να καταρτιστεί μια λίστα με μάσκες εισόδου για όλες τις χώρες. Ως πηγή χρησιμοποιήθηκαν πληροφορίες που δημοσιεύτηκαν στον ιστότοπο της Διεθνούς Ένωσης Τηλεπικοινωνιών.
Η συλλογή αυτών των πληροφοριών έφερε πολλές εκπλήξεις. Στη διαδικασία συλλογής πληροφοριών, έπρεπε να λάβουμε υπόψη τα πάντα πιθανές επιλογέςαριθμούς τηλεφώνου, συμπεριλαμβανομένων και εντός της χώρας. Ωστόσο, λόγω μεγάλη ποσότηταπληροφορίες που υποβάλλονται σε χειροκίνητη επεξεργασία, είναι πιθανό να παρέμειναν ανακρίβειες στη συλλεγόμενη βάση δεδομένων. Σχεδιάζεται να γίνουν διορθώσεις στο αρχικό σύνολο με την πάροδο του χρόνου.
Υλοποίηση λογισμικού Η υλοποίηση jquery.inputmask, η οποία αναφέρθηκε πολλές φορές στο Habrahabr, χρησιμοποιήθηκε ως ο πυρήνας της μάσκας εισόδου. Αυτή η προσθήκη αυτή τη στιγμή αναπτύσσεται ενεργά και, επιπλέον, έχει σχεδιαστεί με τέτοιο τρόπο ώστε να είναι αρκετά εύκολο να γράψετε επεκτάσεις για αυτό. Ωστόσο, σε αυτό το πρόβλημα αποδείχθηκε ότι ήταν σχεδόν αδύνατο να γραφτεί μια τέτοια επέκταση. Δεν τροποποίησα ή ξαναέγραψα το αρχικό πρόσθετο για να ταιριάζει στις ανάγκες μου, επειδή... συνεχίζει ο συγγραφέας του ενεργή εργασίαπάνω από την επέκταση της λειτουργικότητας, με αποτέλεσμα η εφαρμογή των τροποποιήσεών μου να αποδειχθεί προβληματική. Ως εκ τούτου, έπρεπε να γράψω ένα πρόσθετο πρόσθετο πάνω από τον κύριο πυρήνα, το οποίο παρακολουθεί (συν παρεμποδίζει) τις εξωτερικές επιρροές και κάνει τροποποιήσεις δεδομένων. Για να εφαρμόσουμε τους δικούς μας χειριστές για εξωτερικές επιρροές πριν από τους χειριστές του κύριου πρόσθετου, χρησιμοποιήσαμε το πρόσθετο jquery.bind-first βιβλιοθήκης Ταξινόμηση επιτρεπόμενων μάσκας εισόδου For σωστή επιλογήτην πιο κατάλληλη μάσκα εισαγωγής, ολόκληρο το σετ μασκών πρέπει να είναι προ-ταξινομημένο με έναν ιδιαίτερο τρόπο. Κατά την ανάπτυξη κανόνων ταξινόμησης, υιοθετήθηκαν οι ακόλουθες συμβάσεις:Το αποτέλεσμα ήταν ακολουθώντας τους κανόνεςταξινομημένα κατά σειρά εφαρμογής:
- keydown - πληκτρολογήσεις backspace και διαγραφής παρακολουθούνται για αλλαγή της τρέχουσας μάσκας εισαγωγής προτού ο κύριος χειριστής αφαιρέσει έναν χαρακτήρα από το κείμενο. Επιπλέον, το πάτημα του πλήκτρου Εισαγωγή, το οποίο αλλάζει τη λειτουργία εισαγωγής κειμένου, παρακολουθείται για συγχρονισμό.
- πάτημα πλήκτρων - επειδή ο χαρακτήρας που εισαγάγατε ενδέχεται να μην επιλυθεί από την αρχική μάσκα εισαγωγής (καθώς όλοι οι σημαντικοί χαρακτήρες σε αυτήν αντικαθίστανται με μπαλαντέρ), είναι απαραίτητο να ελέγξετε νέα γραμμήνα ικανοποιήσει μία από τις επιτρεπόμενες μάσκες. Εάν δεν υπάρχουν τέτοιες μάσκες, τότε η εισαγωγή χαρακτήρων απορρίπτεται, διαφορετικά, η μάσκα εισόδου ενημερώνεται, μετά την οποία το συμβάν μεταβιβάζεται στον χειριστή του πυρήνα.
- επικόλληση , εισαγωγή - επικόλληση κειμένου από το πρόχειρο. Πριν από τη μεταφορά της επεξεργασίας στον πυρήνα, επιλέγεται μια μάσκα εισόδου για τη συμβολοσειρά που προκύπτει από την επικόλληση κειμένου από το πρόχειρο. Εάν δεν μπορεί να βρεθεί η μάσκα εισαγωγής, το κείμενο περικόπτεται χαρακτήρα προς χαρακτήρα από το τέλος μέχρι το κείμενο να ταιριάζει με τουλάχιστον μία μάσκα εισαγωγής. Μια παρόμοια λειτουργία εκτελείται κατά τη διόρθωση κειμένου σε ένα πεδίο εισαγωγής καλώντας τη συνάρτηση val(), καθώς και κατά την προετοιμασία μιας μάσκας εισόδου εάν εφαρμόζεται σε ένα μη κενό πεδίο εισαγωγής.
- dragdrop, η επεξεργασία απόθεσης είναι παρόμοια με το συμβάν επικόλλησης.
- θολούρα - πρόσθετη επεξεργασίασε περίπτωση που η λειτουργία καθαρισμού κειμένου είναι ενεργοποιημένη όταν χάνεται η εστίαση, εάν δεν ικανοποιεί τη μάσκα εισαγωγής. Αυτό το συμβάν αναχαιτίζεται μετά τον κύριο χειριστή, σε αντίθεση με τα προηγούμενα.
Όλα τα συμβάντα αναρτώνται στο χώρο της μάσκας εισόδου. Αυτό αποφεύγει τη λανθασμένη συμπεριφορά κατά την κλήση της μάσκας εισόδου μετά την προετοιμασία του πρόσθετου (καθώς ο πυρήνας αφαιρεί όλους τους προηγουμένως εγκατεστημένους χειριστές στο χώρο μάσκας εισόδου κατά την προετοιμασία).
Παράδειγμα χρήσης Μορφή λίστας μάσκας Μια λίστα μάσκας είναι ένας πίνακας αντικειμένων JavaScript, κατά προτίμηση με το ίδιο σύνολο ιδιοτήτων. Τουλάχιστον μία ιδιότητα που περιέχει μια μάσκα εισόδου πρέπει να υπάρχει για όλα τα αντικείμενα πίνακα. Το όνομα της παραμέτρου που περιέχει τη μάσκα μπορεί να είναι αυθαίρετο. Παρακάτω είναι ένα τμήμα ενός τέτοιου πίνακα:[ … ( "μάσκα": "+7(###)###-##-##", "cc": "RU", "name_en": "Russia", "desc_en": "", " name_ru": "Russia", "desc_ru": "" ), ( "μάσκα": "+250(###)###-###", "cc": "RW", "name_en": " Ρουάντα", "desc_en": "", "name_ru": "Rwanda", "desc_ru": "" ), ( "μάσκα": "+966-5-####-####", "cc ": "SA", "name_en": "Σαουδική Αραβία", "desc_en": "mobile", "name_ru": " Σαουδική Αραβία", "desc_ru": "κινητό" ), ( "μάσκα": "+966-#-###-####", "cc": "SA", "name_en": "Σαουδική Αραβία", " desc_en": "", "name_ru": "Saudi Arabia", "desc_ru": "" ), … ] Παράμετροι σύνδεσης plugin Πριν από τη σύνδεση, πρέπει να φορτώσετε και να ταξινομήσετε τη λίστα με τις μάσκες. Αυτό γίνεται εκτελώντας την ακόλουθη συνάρτηση :
$.masksSort = συνάρτηση (MaskList, defs, match, key)
- maskList - ένας πίνακας αντικειμένων που αποθηκεύει μάσκες εισόδου (τεμάχιο αντικειμένου βλέπε παραπάνω).
- defs - μια σειρά από χαρακτήρες μπαλαντέρ (στην περίπτωσή μου είναι το σύμβολο #).
- αγώνας - κανονική έκφραση, περιγράφοντας σημαντικούς χαρακτήρες (στην περίπτωσή μου αυτό είναι /|#/);
- κλειδί είναι το όνομα της παραμέτρου αντικειμένου πίνακα που περιέχει τη μάσκα εισόδου.
Όταν συνδεθεί, το πρόσθετο αποστέλλεται ειδικό αντικείμενο, περιγράφοντας το έργο του. Αυτό το αντικείμενοπεριέχει το ακόλουθο σύνολο παραμέτρων:
- inputmask - ένα αντικείμενο που περιέχει παραμέτρους που μεταβιβάζονται στην κύρια προσθήκη μάσκας εισόδου.
- αντιστοίχιση - μια τυπική έκφραση που περιγράφει σημαντικούς χαρακτήρες, εξαιρουμένων των χαρακτήρων μπαλαντέρ.
- αντικατάσταση - χαρακτήρας μπαλαντέρ στον οποίο θα αντικατασταθούν όλοι οι σημαντικοί χαρακτήρες. μπορεί να μην υπάρχει στους ορισμούς αντικείμενο του αντικειμένου μάσκας εισόδου.
- λίστα - μια σειρά αντικειμένων που περιγράφουν μάσκες εισόδου.
- listKey - όνομα της παραμέτρου μέσα στο αντικείμενο που αποθηκεύει τη μάσκα εισόδου.
- onMaskChange - μια συνάρτηση που καλείται όταν ενημερώνεται η μάσκα εισόδου. η πρώτη παράμετρος είναι ένα αντικείμενο από τον πίνακα, η μάσκα εισαγωγής του οποίου αντιστοιχεί στο εισαγόμενο κείμενο και η δεύτερη παράμετρος είναι η ακρίβεια του ορισμού της μάσκας: true - η μάσκα εισόδου ταιριάζει πλήρως, false - επιπλέον χαρακτήρες πρέπει να εισαχθούν με αξιοπιστία ορίστε τη μάσκα.
Για να αρχικοποιήσετε την προσθήκη, πρέπει να εφαρμόσετε τη μέθοδο inputmasks στο πεδίο εισαγωγής:
$.fn.inputmasks = συνάρτηση (maskOpts, λειτουργία)
- maskOpts - ένα αντικείμενο που περιγράφει τη λειτουργία του πρόσθετου.
- λειτουργία - προαιρετική. V παρούσα στιγμήυποστηρίζεται η τιμή isCompleted - ως αποτέλεσμα, η μέθοδος επιστρέφει true εάν το κείμενο που αντιστοιχεί στην κατάλληλη μάσκα εισαχθεί πλήρως και ψευδές διαφορετικά.
Μάσκα εισαγωγής var maskList = $.masksSort($.masksLoad("phone-codes.json"), ["#"], /|#/, "μάσκα");