چگونه کاراکترهای خاصی را در ورودی غیرفعال کنیم؟ چگونه می توان ورود کاراکترهای خاص را ممنوع کرد یا آنها را در یک فیلد یا textarea JS جایگزین کرد؟ حتی اعداد صحیح مثبت.

من یک کار نسبتاً استاندارد دریافت کردم: فیلتر کردن کاراکترهای وارد شده توسط کاربر در ورودی، یعنی کاربر می تواند مجموعه ای از اعداد و حروف را در یک خط وارد کند، به عنوان مثال، "5s68d.4r55e.6t5"، و به سرور من باید مبلغ صحیح را به روبل برای پس انداز ارسال کنید - "568.455" (روبل).

من این کار را با سرعت کافی با پیوست کردن یک رویداد Focusout به ورودی انجام دادم، اما راه حل من تعدادی اشکالات مهم داشت: جایی که در در این مثالآیا مبلغ به روبل تمام می شود و کوپک شروع می شود؟ اگر کاربر چندین منهای وارد کند (مقادیر منفی نیز در این مورد صحیح است) کدام یک از منفی ها را باید ابتدای خط در نظر گرفت؟ و غیره.

بنابراین، نسخه دوم اسکریپت با عبارات منظم برای رویداد keyup ظاهر شد:

$(e.currentTarget).val(($(e.currentTarget).val()).replace(/[^0123456789.-]/، ""))
اما همانطور که مشخص شد، این روش یک اشکال محسوس داشت (منظورم این نیست که کاربر کاراکتری را که وارد می کند می بیند و سپس این کاراکتر ناپدید می شود)، یعنی اگر مکان نما را مثلاً در وسط قرار دهید. عدد وارد شده در ورودی، یک حرف را وارد کنید، سپس اسکریپت حرف را قطع می کند، اما دوره ها را به انتهای خط منتقل می کند.

به همین دلیل، یکی از دوستان ارشد به من دستور داد که یک تابع برای رویداد keypress بنویسم. بعد از 30 دقیقه، نسخه سوم تابع آماده شد و چیزی شبیه به این بود:

Function() ( return this.each(function() ($(this).keydown(function(e) ( var key = e.charCode || e.keyCode || 0; // اجازه backspace، tab، delete، enter ، فلش ها، اعداد و اعداد صفحه کلید فقط // بازگشت اعشاری صفحه اصلی، پایان، نقطه و عدد صفحه (کلید == 8 || کلید == 9 || کلید == 13 || کلید == 46 || کلید == 110 | |. کلید == 190 || (کلید >= 35 && کلید = 48 && کلید = 96 کلید