ฉันจะบล็อกหรือ จำกัด อักขระพิเศษจากช่องป้อนข้อมูลด้วย jquery ได้อย่างไร


115

ฉันจะบล็อกอักขระพิเศษไม่ให้พิมพ์ลงในช่องป้อนข้อมูลด้วย jquery ได้อย่างไร


ใช้ปลั๊กอินjQuery Validationและอนุญาตเฉพาะอักขระที่เป็นตัวอักษรและตัวเลขคละกัน
Tomas Aschan

คำตอบ:


133

ตัวอย่างง่ายๆโดยใช้นิพจน์ทั่วไปซึ่งคุณสามารถเปลี่ยนเพื่ออนุญาต / ไม่อนุญาตอะไรก็ได้ที่คุณต้องการ

$('input').on('keypress', function (event) {
    var regex = new RegExp("^[a-zA-Z0-9]+$");
    var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
    if (!regex.test(key)) {
       event.preventDefault();
       return false;
    }
});

49
วิธีนี้ใช้ไม่ได้กับข้อความที่วางและอาจป้องกันไม่ให้ผู้ใช้กดแป้นพิมพ์ที่ไม่ใช่ข้อความเช่น backspace แป้นลูกศร ฯลฯ
bendytree

6
สิ่งนี้จะไม่อนุญาตให้ backspace ใน firefox
Alex

ใช้ไม่ได้กับคำในภาษาสเปนเช่นavión (เครื่องบิน) árbol (ต้นไม้) ฯลฯ
nikoskip

มันใช้ไม่ได้กับ Firefox brower ล่าสุด แต่ทำงานได้ดีใน chrome
Phoenix

วิธีนี้ใช้ได้กับฉันในองค์ประกอบ Bootstrap-TagsInput ในการแก้ไขปัญหาการวางคุณสามารถเพิ่ม "วาง" ลงในรายการพารามิเตอร์เหตุการณ์ได้ดังนี้ $ ('input'). on ('keypress, paste' ', () => ........
Jim22150

60

ฉันกำลังมองหาคำตอบที่ จำกัด การป้อนข้อมูลไว้เฉพาะอักขระที่เป็นตัวเลขและตัวอักษร แต่ยังคงอนุญาตให้ใช้อักขระควบคุม (เช่น backspace, delete, tab) และคัดลอก + วาง ไม่มีคำตอบใดที่ฉันได้ลองทำตามข้อกำหนดเหล่านี้ทั้งหมดดังนั้นฉันจึงคิดสิ่งต่อไปนี้โดยใช้inputเหตุการณ์

$('input').on('input', function() {
  $(this).val($(this).val().replace(/[^a-z0-9]/gi, ''));
});

แก้ไข:
ตามที่Rinogoชี้ให้เห็นในความคิดเห็นข้อมูลโค้ดด้านบนบังคับให้เคอร์เซอร์ไปที่จุดสิ้นสุดของอินพุตเมื่อพิมพ์ตรงกลางข้อความอินพุต ฉันเชื่อว่าข้อมูลโค้ดด้านล่างช่วยแก้ปัญหานี้ได้

$('input').on('input', function() {
  var c = this.selectionStart,
      r = /[^a-z0-9]/gi,
      v = $(this).val();
  if(r.test(v)) {
    $(this).val(v.replace(r, ''));
    c--;
  }
  this.setSelectionRange(c, c);
});

1
+1 ฉันกำลังเลื่อนดูคำตอบเพื่อหาคำตอบเช่นนี้หรือฉันจะส่งคำตอบของฉันเอง คำตอบนี้จะกรองอักขระที่ไม่ได้รับอนุญาตออกทันที! ที่ดี!
emilhem

2
+1 ใช้ได้กับข้อความที่วางไม่รบกวนการแบ็คสเปซของ FF และลบคีย์และไม่ต้องพึ่งพาevent.whichหรือevent.keycode! หวังว่าฉันจะทำได้ +10!
rinogo

3
... แต่ใน Chrome และ IE เมื่อคุณพิมพ์อักขระใหม่หรือใช้แบ็กสเปซและลบปุ่มที่อยู่ตรงกลางของข้อความที่ป้อนเคอร์เซอร์จะถูกย้ายไปที่ท้ายข้อความ ... : / มีวิธีแก้ปัญหาง่ายๆสำหรับ นี้? ฉันต้องการอย่างมากเพื่อให้สิ่งนี้ได้ผล!
rinogo

ใกล้แล้ว ... โค้ดนี้มีพฤติกรรมแปลก ๆ ใน Chrome Mobile เคอร์เซอร์จะกระโดดไปรอบ ๆ ตัวอักษรตัวแรกที่พิมพ์และบน backspace ด้วย
Juliano

2
@Juliano น่าสนใจดูเหมือนว่า selectionStart จะคืนค่า 0 บน Chrome Mobile เสมอไม่ว่าเคอร์เซอร์ / คาเร็ตจะอยู่ในตำแหน่งใด ฉันไม่แน่ใจ (ยัง) ว่านี่เป็นข้อบกพร่องหรือพฤติกรรมที่ตั้งใจไว้ ฉันกำลังศึกษาปัญหานี้และจะอัปเดตคำตอบหรือความคิดเห็นที่นี่เมื่อฉันเรียนรู้เพิ่มเติม
rexmac

48

คำตอบสั้น ๆ :ป้องกันเหตุการณ์ 'กดแป้น':

$("input").keypress(function(e){
    var charCode = !e.charCode ? e.which : e.charCode;

    if(/* Test for special character */ )
        e.preventDefault();
})

คำตอบแบบยาว:ใช้ปลั๊กอินเช่นjquery.alphanum

มีหลายสิ่งที่ควรพิจารณาเมื่อเลือกวิธีแก้ปัญหา:

  • วางข้อความแล้ว
  • อักขระควบคุมเช่น backspace หรือ F5 อาจถูกป้องกันโดยรหัสด้านบน
  • é, í, ä ฯลฯ
  • อาหรับหรือจีน ...
  • ความเข้ากันได้ของ Cross Browser

ฉันคิดว่าพื้นที่นี้ซับซ้อนพอที่จะรับประกันการใช้ปลั๊กอินของบุคคลที่สาม ฉันลองใช้ปลั๊กอินที่มีอยู่หลายตัว แต่พบปัญหาบางอย่างกับแต่ละปลั๊กอินดังนั้นฉันจึงเขียนjquery.alphanumต่อไป รหัสมีลักษณะดังนี้:

$("input").alphanum();

หรือสำหรับการควบคุมที่ละเอียดยิ่งขึ้นให้เพิ่มการตั้งค่าบางอย่าง:

$("#username").alphanum({
    allow      : "€$£",
    disallow   : "xyz",
    allowUpper : false
});

หวังว่าจะช่วยได้


1
คนน่ากลัวน่ากลัว ฉันต้องเพิ่มตัวเลือกสำหรับการเปิด / ปิดการใช้งานเครื่องหมายทับ ('/') เนื่องจากมันไม่ทำงานในขณะที่วางไว้ในการallowตั้งค่า แต่นั่นคือความสวยงามของปลั๊กอิน jquery ซึ่งคุณสามารถปรับเปลี่ยนให้เหมาะกับความต้องการของคุณได้ ขอบคุณ!
Adrian Marinica

ขอบคุณเอเดรียน Btw ฉันเพิ่งลองเปิดใช้งานเครื่องหมายทับโดยใช้allowตัวเลือกและมันก็ใช้ได้สำหรับฉันโดยใช้รหัสนี้: $('#firstName').alphanum({allow: "/"});มีโอกาสใดที่คุณสามารถให้ข้อมูลเพิ่มเติมได้? หากมีข้อบกพร่องหรือปัญหาเกี่ยวกับเอกสารจะเป็นการดีหากได้รับการแก้ไข Cheers
KevSheedy

สวัสดี KevSheedy ขอบคุณที่สละเวลาทดสอบสิ่งนี้ ขออภัยฉันไม่ได้พูดให้ชัดเจนพอ แต่ปัญหาก็คือว่าฉันยังมีและallowOtherCharSets: false แทรกแซงเหล่านี้ด้วยการตั้งค่าที่ตั้งไว้ในallowCaseless: false allowจากมุมมองของฉันฉันคิดว่าallowตัวเลือกควรยับยั้งตัวเลือกอื่น ๆ ทั้งหมด (เช่นallowOtherCharSetsหรือallowCaseless) ดังนั้นหากคุณระบุอักขระในallowตัวเลือกควรได้รับอนุญาตโดยไม่คำนึงถึงตัวเลือกอื่น ๆ ที่ตั้งค่าไว้ในออบเจ็กต์การกำหนดค่า disallowเดียวกันจะไปสำหรับ แต่นี่เป็นเพียงความคิดเห็นของฉัน :) ไชโยอีกครั้ง! :)
Adrian Marinica

จุดดีเอเดรียน ฉันได้ดำเนินการต่อและเผยแพร่การแก้ไขใน V1.0.6 เพื่อสร้างallowและdisallowมีลำดับความสำคัญสูงกว่า มันเป็นบันทึกไว้ในฉบับที่ 7 หวังว่ามันจะช่วยได้
KevSheedy

6
"ก็เลยเขียนต่อไปว่า jquery.alphanum" เจ๋งมาก!
เฟลิกซ์

14

ใช้แอตทริบิวต์การป้อนรูปแบบของ HTML5!

<input type="text" pattern="^[a-zA-Z0-9]+$" />

11
แม้ว่าโซลูชันนี้จะป้องกันไม่ให้ส่งอักขระที่ไม่ต้องการ แต่ก็ไม่ได้ป้องกันไม่ให้ป้อนอักขระที่ไม่ต้องการลงในช่องป้อนข้อมูล
rexmac

1
นอกจากนี้ยังมีความเสี่ยงที่ผู้ใช้ไม่ได้ใช้เบราว์เซอร์ HTML5
Captain Kenpachi

จากประสบการณ์ UX สิ่งหนึ่งที่หลายคนเกลียดมากกว่าการถูก จำกัด ในสิ่งที่พวกเขาสามารถพิมพ์ได้คือการบอกว่าคุณทำผิดในภายหลัง - การบังคับป้อนข้อมูลคือการลดข้อความแสดงข้อผิดพลาดและการแจ้งเตือนที่ไม่ถูกต้อง
Julix

1
@ จูลิกซ์มันเป็นเรื่องของกรณี มีบางช่องที่สามารถเป็นตัวเลขได้เท่านั้น (ราคาหรือจำนวนสกุลเงินใด ๆ ฯลฯ ) ซึ่งไม่สมเหตุสมผลที่จะฟังการป้อนอักขระที่เป็นตัวอักษร แต่ใช่ของฉันไม่ใช่วิธีแก้ปัญหาของ OP แต่เป็นวิธีที่ดีและง่ายในการช่วยแก้ปัญหา UX
keepitreal

13

กล่องข้อความของคุณ:

<input type="text" id="name">

จาวาสคริปต์ของคุณ:

$("#name").keypress(function(event) {
    var character = String.fromCharCode(event.keyCode);
    return isValid(character);     
});

function isValid(str) {
    return !/[~`!@#$%\^&*()+=\-\[\]\\';,/{}|\\":<>\?]/g.test(str);
}

@Bhargav Rao ฉันลบโพสต์ที่ซ้ำกันอื่น ๆ และโพสต์ใหม่เพราะอันนี้เหมาะสมกว่าขอบคุณที่ชี้ให้เห็น
แชนด์เลอร์

11

ใช้ regex เพื่ออนุญาต / ไม่อนุญาตสิ่งใด ๆ นอกจากนี้สำหรับเวอร์ชันที่มีประสิทธิภาพมากกว่าคำตอบที่ยอมรับเล็กน้อยการอนุญาตให้ใช้อักขระที่ไม่มีค่าคีย์ที่เกี่ยวข้อง (แบ็กสเปซแท็บแป้นลูกศรลบ ฯลฯ ) สามารถทำได้โดยผ่านเหตุการณ์การกดแป้นและ ตรวจสอบคีย์ตามรหัสแทนค่า

$('#input').bind('keydown', function (event) {
        switch (event.keyCode) {
            case 8:  // Backspace
            case 9:  // Tab
            case 13: // Enter
            case 37: // Left
            case 38: // Up
            case 39: // Right
            case 40: // Down
            break;
            default:
            var regex = new RegExp("^[a-zA-Z0-9.,/ $@()]+$");
            var key = event.key;
            if (!regex.test(key)) {
                event.preventDefault();
                return false;
            }
            break;
        }
});

11

ลองดูที่ปลั๊กอิน jQuery ที่เป็นตัวเลขและตัวอักษร https://github.com/KevinSheedy/jquery.alphanum

//All of these are from their demo page
//only numbers and alpha characters
$('.sample1').alphanumeric();
//only numeric
$('.sample4').numeric();
//only numeric and the .
$('.sample5').numeric({allow:"."});
//all alphanumeric except the . 1 and a
$('.sample6').alphanumeric({ichars:'.1a'});

มีหนึ่งสำหรับตัวอักษร? ปกติฉันใช้ nan สำหรับตัวเลขเท่านั้น (เช่นรหัสไปรษณีย์หรือโทรศัพท์)

3

เขียนโค้ดจาวาสคริปต์ในเหตุการณ์ onkeypress ของ textbox ตามข้อกำหนดอนุญาตและ จำกัด อักขระในกล่องข้อความของคุณ

function isNumberKeyWithStar(evt) {
    var charCode = (evt.which) ? evt.which : event.keyCode
    if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 42)
        return false;
    return true;
}
function isNumberKey(evt) {
    var charCode = (evt.which) ? evt.which : event.keyCode
    if (charCode > 31 && (charCode < 48 || charCode > 57))
        return false;
    return true;
}
function isNumberKeyForAmount(evt) {
    var charCode = (evt.which) ? evt.which : event.keyCode
    if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 46)
        return false;
    return true;
}


1
วิธีนี้ใช้ได้ผลถ้าฉันพิมพ์ด้วยตนเอง แต่ฉันสามารถวางอักขระพิเศษที่คัดลอกมาได้
Sunil Garg

3

ฉันใช้รหัสนี้เพื่อแก้ไขสิ่งอื่น ๆ ที่ฉันเห็น เฉพาะผู้ใช้เท่านั้นที่ยิ่งใหญ่เขียนหากกดแป้นหรือวางข้อความผ่านการทดสอบรูปแบบ (จับคู่) (ตัวอย่างนี้เป็นการป้อนข้อความที่อนุญาตให้มีเพียง 8 หลัก)

$("input").on("keypress paste", function(e){
    var c = this.selectionStart, v = $(this).val();
    if (e.type == "keypress")
        var key = String.fromCharCode(!e.charCode ? e.which : e.charCode)
    else
        var key = e.originalEvent.clipboardData.getData('Text')
    var val = v.substr(0, c) + key + v.substr(c, v.length)
    if (!val.match(/\d{0,8}/) || val.match(/\d{0,8}/).toString() != val) {
        e.preventDefault()
        return false
    }
})

ทำไม!e.charCode ? e.which : e.charCodeไม่เพียงe.charCode ? e.charCode : e.which?
Massimiliano Kraus

ต้องทำการเปลี่ยนแปลงอะไรบ้างสำหรับการยอมรับตัวเลขทศนิยม
ubm

2

นี่คือตัวอย่างที่ป้องกันไม่ให้ผู้ใช้พิมพ์อักขระ "a"

$(function() {
$('input:text').keydown(function(e) {
if(e.keyCode==65)
    return false;

});
});

การอ้างอิงรหัสสำคัญที่นี่:
http://www.expandinghead.net/keycode.html


ฉันคิดว่ารหัสคีย์ทั้งหมดที่คุณไม่ต้องการอนุญาตอาจเป็นเรื่องยากที่จะลองและจัดการ
RSolberg

หากคุณต้องการ จำกัด บางคนให้สามารถป้อนตัวเลข 1 ถึง 5 ได้คุณต้องจัดการรหัส 5 รหัสภายในรหัสของคุณ
RSolberg

2
จริง ๆ แล้วไม่ใช่แผนการที่ไม่ดีถ้า AlphaNumeric ไม่ใช่ปลั๊กอินสำหรับคุณ ฉันทำให้มันใช้งานได้กับคำสั่ง switch / case ตัวอย่างนี้ไม่อนุญาตให้ใช้อักขระที่ไม่ได้รับอนุญาตในชื่อไดเร็กทอรี: $ ('input [type =' text '], textarea'). keydown (function (ev) {switch (ev.keyCode) {case 47: case 92: case 63: case 37: case 42: case 59: case 124: case 34: case 60: case 62: return false;};});
M Miller

@ user434917 รหัสของคุณใช้งานไม่ได้เมื่อฉันทดสอบกับเบราว์เซอร์ Chrome บนมือถือ Android คุณมีวิธีแก้ไขอย่างไร .. ?
Pranesh Janarthanan

2
$(function(){
      $('input').keyup(function(){
        var input_val = $(this).val();
        var inputRGEX = /^[a-zA-Z0-9]*$/;
        var inputResult = inputRGEX.test(input_val);
          if(!(inputResult))
          {     
            this.value = this.value.replace(/[^a-z0-9\s]/gi, '');
          }
       });
    });

1

ใช่คุณสามารถทำได้โดยใช้ jQuery เป็น:

<script>
$(document).ready(function()
{
    $("#username").blur(function()
    {
        //remove all the class add the messagebox classes and start fading
        $("#msgbox").removeClass().addClass('messagebox').text('Checking...').fadeIn("slow");
        //check the username exists or not from ajax
        $.post("user_availability.php",{ user_name:$(this).val() } ,function(data)
        {
          if(data=='empty') // if username is empty
          {
            $("#msgbox").fadeTo(200,0.1,function() //start fading the messagebox
            { 
              //add message and change the class of the box and start fading
              $(this).html('Empty user id is not allowed').addClass('messageboxerror').fadeTo(900,1);
            });
          }
          else if(data=='invalid') // if special characters used in username
          {
            $("#msgbox").fadeTo(200,0.1,function() //start fading the messagebox
            { 
              //add message and change the class of the box and start fading
              $(this).html('Sorry, only letters (a-z), numbers (0-9), and periods (.) are allowed.').addClass('messageboxerror').fadeTo(900,1);
            });
          }
          else if(data=='no') // if username not avaiable
          {
            $("#msgbox").fadeTo(200,0.1,function() //start fading the messagebox
            { 
              //add message and change the class of the box and start fading
              $(this).html('User id already exists').addClass('messageboxerror').fadeTo(900,1);
            });     
          }
          else
          {
            $("#msgbox").fadeTo(200,0.1,function()  //start fading the messagebox
            { 
              //add message and change the class of the box and start fading
              $(this).html('User id available to register').addClass('messageboxok').fadeTo(900,1); 
            });
          }

        });

    });
});
</script>
<input type="text" id="username" name="username"/><span id="msgbox" style="display:none"></span>

และสคริปต์สำหรับuser_availability.phpของคุณจะเป็น:

<?php
include'includes/config.php';

//value got from the get method
$user_name = trim($_POST['user_name']);

if($user_name == ''){
    echo "empty";
}elseif(preg_match('/[\'^£$%&*()}{@#~?><>,|=_+¬-]/', $user_name)){
    echo "invalid";
}else{
    $select = mysql_query("SELECT user_id FROM staff");

    $i=0;
    //this varible contains the array of existing users
    while($fetch = mysql_fetch_array($select)){
        $existing_users[$i] = $fetch['user_id'];
        $i++;
    }

    //checking weather user exists or not in $existing_users array
    if (in_array($user_name, $existing_users))
    {
        //user name is not availble
        echo "no";
    } 
    else
    {
        //user name is available
        echo "yes";
    }
}
?>

ฉันพยายามเพิ่มสำหรับ/และ\แต่ไม่สำเร็จ


คุณสามารถทำได้โดยใช้ javascript & code จะเป็น:

<!-- Check special characters in username start -->
<script language="javascript" type="text/javascript">
function check(e) {
    var keynum
    var keychar
    var numcheck
    // For Internet Explorer
    if (window.event) {
        keynum = e.keyCode;
    }
    // For Netscape/Firefox/Opera
    else if (e.which) {
        keynum = e.which;
    }
    keychar = String.fromCharCode(keynum);
    //List of special characters you want to restrict
    if (keychar == "'" || keychar == "`" || keychar =="!" || keychar =="@" || keychar =="#" || keychar =="$" || keychar =="%" || keychar =="^" || keychar =="&" || keychar =="*" || keychar =="(" || keychar ==")" || keychar =="-" || keychar =="_" || keychar =="+" || keychar =="=" || keychar =="/" || keychar =="~" || keychar =="<" || keychar ==">" || keychar =="," || keychar ==";" || keychar ==":" || keychar =="|" || keychar =="?" || keychar =="{" || keychar =="}" || keychar =="[" || keychar =="]" || keychar =="¬" || keychar =="£" || keychar =='"' || keychar =="\\") {
        return false;
    } else {
        return true;
    }
}
</script>
<!-- Check special characters in username end -->

<!-- in your form -->
    User id : <input type="text" id="txtname" name="txtname" onkeypress="return check(event)"/>

2
เพื่อนคุณรวมโค้ดส่วนเกินจำนวนมากซึ่งอาจไม่เป็นประโยชน์ คุณสามารถลดขั้นต่ำสุดได้หรือไม่? และเขาถามเกี่ยวกับ jQuery ฉันไม่แน่ใจว่า PHP เกี่ยวข้องหรือไม่
Simon East

@PHP Ferrari: ฉันใช้รหัสจาวาสคริปต์รหัสของคุณทำงานได้ดีฉันจะแสดงข้อความป๊อปอัพแจ้งเตือนได้อย่างไรหากลูกค้าป้อนอักขระพิเศษ ข้อความเช่น "ไม่อนุญาตให้ใช้อักขระพิเศษ"
อัญมณี

1

แค่ตัวเลข:

$ ('input.time'). keydown (function (e) {if (e.keyCode> = 48 && e.keyCode <= 57) (return true;} else {return false;}});

หรือสำหรับเวลา ได้แก่ ":"

$ ('input.time'). keydown (function (e) {if (e.keyCode> = 48 && e.keyCode <= 58) (return true;} else {return false;}});

ยังรวมถึงลบและ backspace:

$ ('input.time'). keydown (function (e) {if ((e.keyCode> = 46 && e.keyCode <= 58) || e.keyCode == 8) {return true;} else {return เท็จ;}});

โชคไม่ดีที่ไม่ทำให้มันทำงานบน iMAC


1

ต้องการแสดงความคิดเห็นเกี่ยวกับความคิดเห็นของ Alex ต่อคำตอบของ Dale เป็นไปไม่ได้ (อันดับแรกต้องการ "ตัวแทน" เท่าไหร่สิ่งนั้นจะไม่เกิดขึ้นในไม่ช้า .. ระบบแปลก ๆ ) ดังนั้นคำตอบ:

สามารถเพิ่ม Backspace ได้โดยการเพิ่ม \ b ในนิยาม regex ดังนี้: [a-zA-Z0-9 \ b] หรือคุณเพียงแค่อนุญาตช่วงละตินทั้งหมดรวมทั้งอักขระที่ "ไม่แปลกใหม่" มากหรือน้อย (ควบคุมอักขระเช่น backspace ด้วย): ^ [\ u0000- \ u024F \ u20AC] + $

เฉพาะถ่านยูนิโคดจริงนอกละตินเท่านั้นที่มีเครื่องหมายยูโร (20ac) เพิ่มสิ่งที่คุณต้องการ

หากต้องการจัดการอินพุตที่ป้อนผ่านการคัดลอกและวางเพียงเชื่อมโยงกับเหตุการณ์ "เปลี่ยนแปลง" และตรวจสอบอินพุตที่นั่นด้วยเช่นการลบหรือตัดออก / ให้ข้อความแสดงข้อผิดพลาดเช่น "อักขระที่ไม่รองรับ" ..

if (!regex.test($j(this).val())) {
  alert('your input contained not supported characters');
  $j(this).val('');
  return false;
}

1

จำกัด อักขระพิเศษในการกดแป้น นี่คือหน้าทดสอบรหัสคีย์: http://www.asquare.net/javascript/tests/KeyCode.html

var specialChars = [62,33,36,64,35,37,94,38,42,40,41];

some_element.bind("keypress", function(event) {
// prevent if in array
   if($.inArray(event.which,specialChars) != -1) {
       event.preventDefault();
   }
});

ใน Angular ฉันต้องการรูปแบบสกุลเงินที่เหมาะสมในฟิลด์ข้อความของฉัน วิธีแก้ปัญหาของฉัน:

var angularApp = angular.module('Application', []);

...

// new angular directive
angularApp.directive('onlyNum', function() {
    return function( scope, element, attrs) {

        var specialChars = [62,33,36,64,35,37,94,38,42,40,41];

        // prevent these special characters
        element.bind("keypress", function(event) {
            if($.inArray(event.which,specialChars) != -1) {
                prevent( scope, event, attrs)
             }
        });

        var allowableKeys = [8,9,37,39,46,48,49,50,51,52,53,54,55,56
            ,57,96,97,98,99,100,101,102,103,104,105,110,190];

        element.bind("keydown", function(event) {
            if($.inArray(event.which,allowableKeys) == -1) {
                prevent( scope, event, attrs)
            }
        });
    };
})

// scope.$apply makes angular aware of your changes
function prevent( scope, event, attrs) {
    scope.$apply(function(){
        scope.$eval(attrs.onlyNum);
        event.preventDefault();
    });
    event.preventDefault();
}

ใน html ให้เพิ่มคำสั่ง

<input only-num type="text" maxlength="10" id="amount" placeholder="$XXXX.XX"
   autocomplete="off" ng-model="vm.amount" ng-change="vm.updateRequest()">

และในตัวควบคุมเชิงมุมที่เกี่ยวข้องฉันอนุญาตให้มีเพียง 1 ช่วงเวลาเท่านั้นแปลงข้อความเป็นตัวเลขและเพิ่มการปัดเศษตัวเลขใน 'เบลอ'

...

this.updateRequest = function() {
    amount = $scope.amount;
    if (amount != undefined) {
        document.getElementById('spcf').onkeypress = function (e) {
        // only allow one period in currency
        if (e.keyCode === 46 && this.value.split('.').length === 2) {
            return false;
        }
    }
    // Remove "." When Last Character and round the number on blur
    $("#amount").on("blur", function() {
      if (this.value.charAt(this.value.length-1) == ".") {
          this.value.replace(".","");
          $("#amount").val(this.value);
      }
      var num = parseFloat(this.value);
      // check for 'NaN' if its safe continue
      if (!isNaN(num)) {
        var num = (Math.round(parseFloat(this.value) * 100) / 100).toFixed(2);
        $("#amount").val(num);
      }
    });
    this.data.amountRequested = Math.round(parseFloat(amount) * 100) / 100;
}

...

1

ในการแทนที่อักขระพิเศษเว้นวรรคและแปลงเป็นตัวพิมพ์เล็ก

$(document).ready(function (){
  $(document).on("keyup", "#Id", function () {
  $("#Id").val($("#Id").val().replace(/[^a-z0-9\s]/gi, '').replace(/[_\s]/g, '').toLowerCase());
 }); 
});

0
[User below code to restrict special character also    

$(h.txtAmount).keydown(function (event) {
        if (event.shiftKey) {
            event.preventDefault();
        }
        if (event.keyCode == 46 || event.keyCode == 8) {
        }
        else {
            if (event.keyCode < 95) {
                if (event.keyCode < 48 || event.keyCode > 57) {
                    event.preventDefault();
                }
            }
            else {
                if (event.keyCode < 96 || event.keyCode > 105) {
                    event.preventDefault();
                }
            }
        }


    });]

4
คำตอบแบบใช้รหัสเท่านั้นจะไม่มีประโยชน์มากเกินไปหากไม่มีคำอธิบาย
Vemonus

0

อนุญาตเฉพาะตัวเลขในกล่องข้อความ (จำกัด ตัวอักษรและอักขระพิเศษ)

        /*code: 48-57 Numbers
          8  - Backspace,
          35 - home key, 36 - End key
          37-40: Arrow keys, 46 - Delete key*/
        function restrictAlphabets(e){
            var x=e.which||e.keycode;
            if((x>=48 && x<=57) || x==8 ||
                (x>=35 && x<=40)|| x==46)
                return true;
            else
                return false;
        }

0
/**
     * Forbids special characters and decimals
     * Allows numbers only
     * */
    const numbersOnly = (evt) => {

        let charCode = (evt.which) ? evt.which : evt.keyCode;
        if (charCode === 46 && charCode > 31 && (charCode < 48 || charCode > 57)) {
            return false;
        }

        let inputResult = /^[0-9]*$/.test(evt.target.value);
        if (!inputResult) {
            evt.target.value = evt.target.value.replace(/[^a-z0-9\s]/gi, '');
        }

        return true;
    }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.