Φίλτρο χαρακτήρων που εισάγονται στην εισαγωγή. Πώς να απενεργοποιήσετε ορισμένους χαρακτήρες στην εισαγωγή; Αποτρέψτε την εισαγωγή γραμμάτων στην εισαγωγή

25.10.2021

Έλαβα μια αρκετά τυπική εργασία: να φιλτράρω τους χαρακτήρες που εισήγαγε ο χρήστης στην είσοδο, δηλαδή ο χρήστης μπορεί να εισαγάγει ένα σύνολο αριθμών και γραμμάτων σε μια γραμμή, για παράδειγμα, "5s68d.4r55e.6t5" και στον διακομιστή I πρέπει να στείλει το σωστό ποσό σε ρούβλια για εξοικονόμηση - "568.455" (ρούβλια).

Ολοκλήρωσα την εργασία αρκετά γρήγορα επισυνάπτοντας ένα συμβάν εστίασης στην είσοδο, αλλά η λύση μου είχε ορισμένα σημαντικά μειονεκτήματα: όπου στο σε αυτό το παράδειγματελειώνει το ποσό σε ρούβλια και αρχίζουν τα καπίκια; Εάν ο χρήστης εισαγάγει πολλά μείον (οι αρνητικές τιμές είναι επίσης σωστές σε αυτήν την περίπτωση), τότε ποια από τα μείον πρέπει να θεωρηθεί η αρχή της γραμμής; Και ούτω καθεξής.

Επομένως, εμφανίστηκε μια δεύτερη έκδοση του σεναρίου με κανονικές εκφράσεις για το συμβάν keyup:

$(e.currentTarget).val(($(e.currentTarget).val()).replace(/[^0123456789.-]/, ""))
Αλλά όπως αποδείχθηκε, αυτή η μέθοδος είχε ένα αξιοσημείωτο μειονέκτημα (δεν εννοώ ότι ο χρήστης βλέπει τον χαρακτήρα που εισάγει και μετά εξαφανίζεται αυτός ο χαρακτήρας), δηλαδή, εάν τοποθετήσετε τον κέρσορα, για παράδειγμα, στη μέση του εισαγάγετε τον αριθμό στην εισαγωγή, πληκτρολογήστε ένα γράμμα και, στη συνέχεια, το σενάριο θα κόψει το γράμμα, αλλά θα μετακινήσει τα μαθήματα στο τέλος της γραμμής.

Για αυτόν τον λόγο, ένας ανώτερος φίλος μου έδωσε εντολή να γράψω μια συνάρτηση για το συμβάν πατήματος πλήκτρων. Μετά από 30 λεπτά, η τρίτη έκδοση της λειτουργίας ήταν έτοιμη και έμοιαζε κάπως έτσι:

Function() ( return this.each(function() ( $(this).keydown(function(e) ( var key = e.charCode || e.keyCode || 0; // allow backspace, tab, delete, enter , βέλη, αριθμοί και αριθμοί πληκτρολογίου ΜΟΝΟ // δεκαδική απόδοση αρχικής, τέλους, τελείας και αριθμητικού πληκτρολογίου (κλειδί == 8 || κλειδί == 9 || κλειδί == 13 || κλειδί == 46 || κλειδί == 110 | |. κλειδί == 190 || (κλειδί >= 35 && κλειδί = 48 && κλειδί = 96 &&