Girdiyi metin kutusuyla kısıtlama: yalnızca sayılara ve ondalık noktaya izin verilir


109

Girdiyi bir metin kutusuyla nasıl kısıtlayabilirim, böylece yalnızca sayıları ve ondalık noktayı kabul edebilir?


11
İlk sorusu harikaydı Amar ... !!! Neden değiştirdin ..? ;)
SpikETidE

14
Neden olumsuz oylar? Adam burada yeni, sorularını geliştirmesine yardım et, plz.
lexu

Ayyappan.Anbalagan, gönderiye birkaç örnek ekleyin :) Bu dizelerin hepsi sizin için doğru mu? 192 192.168 192.168.0.1
lak-b

anladım adamım teşekkürler .. sadece 22.22 format ayrıca txtbox'ta sadece 5 karaktere izin vermeli ...
TinTin

Sorun ne isNaN(this.textbox.value)?
Sam007

Yanıtlar:


159

<HTML>
  <HEAD>
    <SCRIPT language=Javascript>
       <!--
       function isNumberKey(evt)
       {
          var charCode = (evt.which) ? evt.which : evt.keyCode;
          if (charCode != 46 && charCode > 31 
            && (charCode < 48 || charCode > 57))
             return false;

          return true;
       }
       //-->
    </SCRIPT>
  </HEAD>
  <BODY>
    <INPUT id="txtChar" onkeypress="return isNumberKey(event)" 
           type="text" name="txtChar">
  </BODY>
</HTML>

Bu gerçekten işe yarıyor!


1
&& charCode> 31 neden gereklidir?
contactmatt

2
Karakter 31, Birim Ayırıcı Kodudur. Neredeyse sayı ve metin 32 ve üstü arasındadır. Kod, girilen karakter kodunun ondalık değil VE 31'den (Birim ayırıcı) büyük ancak 48'den küçük (sıfır numara) veya 57'den (dokuz numara) büyük olması durumunda, kabul etmeyin.
Paul Williams

9
eğer (charCode == 46 && evt.srcElement.value.split ('.']. uzunluk> 1) {return false; } Birden çok '.'... :)
Anish Karunakaran

10
: ile tuş takımı numkeys ve dönemleri dahil&& charCode != 190 && charCode != 110 && (charCode > 105 || charCode < 96)
MGA

1
birden fazla kabul ediyor '. [nokta] ', sanırım yanlış.
Akshay Chawla

26
form.onsubmit = function(){
    return textarea.value.match(/^\d+(\.\d+)?$/);
}

Aradığınız bu mu?

Umut ediyorum bu yardım eder.

DÜZENLEME: Yukarıdaki örneğimi, başında en az bir rakam ve ardından en az bir rakam gelecek şekilde yalnızca bir nokta olacak şekilde düzenledim.


1
Bunun aynı zamanda '99 .23.65.86'yı da doğrulayacağını düşünün .... Ama sanırım soru '56987.32'yi tek noktayla doğrulamakla ilgiliydi .....
SpikETidE

Posterin o zamandan beri orijinal sorusunu düzenlediğini görüyorum. Güncelleme için teşekkürler!
tau

1
Uluslararası numaraları (nokta yerine virgül kullanıldığı durumlarda) desteklemek için /-)\d+([\.,]\d+)?$/ kullansam iyi olur
FDIM

26

Kabul edilen çözüm tam değil, çünkü birden fazla '.' Girebilirsiniz, örneğin 24 .... 22..22. bazı küçük değişikliklerle amaçlandığı gibi çalışacaktır:

<html>

<head>
  <script type="text/javascript">
    function isNumberKey(txt, evt) {
      var charCode = (evt.which) ? evt.which : evt.keyCode;
      if (charCode == 46) {
        //Check if the text already contains the . character
        if (txt.value.indexOf('.') === -1) {
          return true;
        } else {
          return false;
        }
      } else {
        if (charCode > 31 &&
          (charCode < 48 || charCode > 57))
          return false;
      }
      return true;
    }
  </script>
</head>

<body>
  <input type="text" onkeypress="return isNumberKey(this, event);" />
</body>

</html>


Cevabınızı kullandım ama bunu onkeypress = "return isNumberKey (this, event);"
Bilbo Baggins

evet, her iki durumda da işe yaradığından, etkinliği geçmek için
yazmanın

bize birkaç tuş vuruşu kurtardı .. tq
Irf

bununla ilgili tek sorun, metni yapıştırarak kopyalayabilmenizdir. Giriş öğesine eklemek ondrop="return false;" onpaste="return false;" oncontextmenu="return false;"yeterli görünüyor
clamchoda

Sürükle-bırak veya kopyala-yapıştır kullanmalarını engellemek her kullanıcı için yanlış bir hizmettir.
Hubert Grzeskowiak

19

İşte ondalık sayılara izin veren ve ayrıca ondalıktan sonraki basamakları 2 ondalık basamağa sınırlayan bir çözüm daha.

function isNumberKey(evt, element) {
  var charCode = (evt.which) ? evt.which : event.keyCode
  if (charCode > 31 && (charCode < 48 || charCode > 57) && !(charCode == 46 || charCode == 8))
    return false;
  else {
    var len = $(element).val().length;
    var index = $(element).val().indexOf('.');
    if (index > 0 && charCode == 46) {
      return false;
    }
    if (index > 0) {
      var CharAfterdot = (len + 1) - index;
      if (CharAfterdot > 3) {
        return false;
      }
    }

  }
  return true;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="number" id="rate" placeholder="Billing Rate" required onkeypress="return isNumberKey(event,this)">


Neredeyse mükemmel .. son koşulunuzda ifbüyük harfli "C" eksik.
DNKROZ

Güzel çözüm !!
Michael Murray

Güzel. Benim için mükemmel çalışıyor.
Noor Ahmed

Bu çözümün, metin alana yapıştırıldığında veya bırakıldığında birden çok noktaya ( .), kısa çizgiye ( -) ve harfe izin everdiğini unutmayın. HTML öğesi ayrıca Chrome'da varsayılan olarak sayıyı artırmak ve azaltmak için iki ok gösterecektir. Azaltma düğmesi, sayının sıfırın altına düşmesine izin verir.
Hubert Grzeskowiak

12

Burada sunulan tüm çözümler tek anahtar olayları kullanıyor. Giriş, copy'n'paste veya drag'n'drop kullanılarak da verilebildiğinden, bu çok hataya açıktır. Ayrıca bazı çözümler ctrl+c, Pos1vb. Karakter olmayan anahtarların kullanımını kısıtlar .

Her tuşa basmayı kontrol etmektense, sonucun beklentilerinize göre geçerli olup olmadığını kontrol etmenizi öneririm.

var validNumber = new RegExp(/^\d*\.?\d*$/);
var lastValid = document.getElementById("test1").value;
function validateNumber(elem) {
  if (validNumber.test(elem.value)) {
    lastValid = elem.value;
  } else {
    elem.value = lastValid;
  }
}
<textarea id="test1" oninput="validateNumber(this);" ></textarea>

oninputOlay bir şey metin alanında ve işlenmiş önce değiştirildi hemen sonra tetiklenir.

Normal İfadeyi, kabul etmek istediğiniz sayı biçimine genişletebilirsiniz. Bu, tek tuş basışlarını kontrol etmekten çok daha bakımı yapılabilir ve genişletilebilir.


Bu en zarif çözüm!
jkd

4

Bunun gibi bir şey mi arıyorsunuz?

   <HTML>
   <HEAD>
   <SCRIPT language=Javascript>
      <!--
      function isNumberKey(evt)
      {
         var charCode = (evt.which) ? evt.which : event.keyCode
         if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57))
            return false;

         return true;
      }
      //-->
   </SCRIPT>
   </HEAD>
   <BODY>
      <INPUT id="txtChar" onkeypress="return isNumberKey(event)" type="text" name="txtChar">
   </BODY>
  </HTML>

4

Jquery'de bu yöntemi uygulamanız yeterlidir ve metin kutunuzu yalnızca bir ondalık sayı ile kabul edecek şekilde doğrulayabilirsiniz.

function IsFloatOnly(element) {    
var value = $(element).val(); 
var regExp ="^\\d+(\\.\\d+)?$";
return value.match(regExp); 
}

Lütfen burada çalışma demosuna bakın


2

Burada benim gibi tökezleyen herkes için, burada yazdığım bir jQuery 1.10.2 sürümü, kaynak yoğun olsa da benim için çok iyi çalışıyor:

/***************************************************
* Only allow numbers and one decimal in text boxes
***************************************************/
$('body').on('keydown keyup keypress change blur focus paste', 'input[type="text"]', function(){
    var target = $(this);

    var prev_val = target.val();

    setTimeout(function(){
        var chars = target.val().split("");

        var decimal_exist = false;
        var remove_char = false;

        $.each(chars, function(key, value){
            switch(value){
                case '0':
                case '1':
                case '2':
                case '3':
                case '4':
                case '5':
                case '6':
                case '7':
                case '8':
                case '9':
                case '.':
                    if(value === '.'){
                        if(decimal_exist === false){
                            decimal_exist = true;
                        }
                        else{
                            remove_char = true;
                            chars[''+key+''] = '';
                        }
                    }
                    break;
                default:
                    remove_char = true;
                    chars[''+key+''] = '';
                    break;
            }
        });

        if(prev_val != target.val() && remove_char === true){
            target.val(chars.join(''))
        }
    }, 0);
});

2

@ Rebisco'nun ondalık sayıyı mükemmel şekilde doğrulamak için verdiği parlak yanıtta küçük bir düzeltme.

function isNumberKey(evt) {
    debugger;
    var charCode = (evt.which) ? evt.which : event.keyCode;
    if (charCode == 46 && evt.srcElement.value.split('.').length>1) {
        return false;
    }
    if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57))
        return false;
    return true;
}

Bu çok iyi. Ancak, yine de bunu yapmak için 2 ondalık nokta ile sınırlamak istiyorum?
nodeffect

2

Float değerleri için istiyorsanız,

İşte kullandığım işlev

<HTML>

<HEAD>
  <SCRIPT language=Javascript>
    <!--
    function check(e, value) {
      //Check Charater
      var unicode = e.charCode ? e.charCode : e.keyCode;
      if (value.indexOf(".") != -1)
        if (unicode == 46) return false;
      if (unicode != 8)
        if ((unicode < 48 || unicode > 57) && unicode != 46) return false;
    }
    //-->
  </SCRIPT>
</HEAD>

<BODY>
  <INPUT id="txtChar" onkeypress="return check(event,value)" type="text" name="txtChar">
</BODY>

</HTML>


1
inputelement.onchange= inputelement.onkeyup= function isnumber(e){
    e= window.event? e.srcElement: e.target;
    while(e.value && parseFloat(e.value)+''!= e.value){
            e.value= e.value.slice(0, -1);
    }
}

1
function integerwithdot(s, iid){
        var i;
        s = s.toString();
        for (i = 0; i < s.length; i++){
            var c;
            if (s.charAt(i) == ".") {
            } else {
                c = s.charAt(i);
            }
            if (isNaN(c)) {
                c = "";
                for(i=0;i<s.length-1;i++){
                    c += s.charAt(i);
                }
                document.getElementById(iid).value = c;
                return false;
            }
        }
        return true;
    }

1

işte size yardımcı olacak komut dosyası:

<script type="text/javascript">
// price text-box allow numeric and allow 2 decimal points only
function extractNumber(obj, decimalPlaces, allowNegative)
{
    var temp = obj.value;

    // avoid changing things if already formatted correctly
    var reg0Str = '[0-9]*';
    if (decimalPlaces > 0) {
        reg0Str += '\[\,\.]?[0-9]{0,' + decimalPlaces + '}';
    } else if (decimalPlaces < 0) {
        reg0Str += '\[\,\.]?[0-9]*';
    }
    reg0Str = allowNegative ? '^-?' + reg0Str : '^' + reg0Str;
    reg0Str = reg0Str + '$';
    var reg0 = new RegExp(reg0Str);
    if (reg0.test(temp)) return true;

    // first replace all non numbers
    var reg1Str = '[^0-9' + (decimalPlaces != 0 ? '.' : '') + (decimalPlaces != 0 ? ',' : '') + (allowNegative ? '-' : '') + ']';
    var reg1 = new RegExp(reg1Str, 'g');
    temp = temp.replace(reg1, '');

    if (allowNegative) {
        // replace extra negative
        var hasNegative = temp.length > 0 && temp.charAt(0) == '-';
        var reg2 = /-/g;
        temp = temp.replace(reg2, '');
        if (hasNegative) temp = '-' + temp;
    }

    if (decimalPlaces != 0) {
        var reg3 = /[\,\.]/g;
        var reg3Array = reg3.exec(temp);
        if (reg3Array != null) {
            // keep only first occurrence of .
            //  and the number of places specified by decimalPlaces or the entire string if decimalPlaces < 0
            var reg3Right = temp.substring(reg3Array.index + reg3Array[0].length);
            reg3Right = reg3Right.replace(reg3, '');
            reg3Right = decimalPlaces > 0 ? reg3Right.substring(0, decimalPlaces) : reg3Right;
            temp = temp.substring(0,reg3Array.index) + '.' + reg3Right;
        }
    }

    obj.value = temp;
}
function blockNonNumbers(obj, e, allowDecimal, allowNegative)
{
    var key;
    var isCtrl = false;
    var keychar;
    var reg;
    if(window.event) {
        key = e.keyCode;
        isCtrl = window.event.ctrlKey
    }
    else if(e.which) {
        key = e.which;
        isCtrl = e.ctrlKey;
    }

    if (isNaN(key)) return true;

    keychar = String.fromCharCode(key);

    // check for backspace or delete, or if Ctrl was pressed
    if (key == 8 || isCtrl)
    {
        return true;
    }

    reg = /\d/;
    var isFirstN = allowNegative ? keychar == '-' && obj.value.indexOf('-') == -1 : false;
    var isFirstD = allowDecimal ? keychar == '.' && obj.value.indexOf('.') == -1 : false;
    var isFirstC = allowDecimal ? keychar == ',' && obj.value.indexOf(',') == -1 : false;
    return isFirstN || isFirstD || isFirstC || reg.test(keychar);
}
function blockInvalid(obj)
{
    var temp=obj.value;
    if(temp=="-")
    {
        temp="";
    }

    if (temp.indexOf(".")==temp.length-1 && temp.indexOf(".")!=-1)
    {
        temp=temp+"00";
    }
    if (temp.indexOf(".")==0)
    {
        temp="0"+temp;
    }
    if (temp.indexOf(".")==1 && temp.indexOf("-")==0)
    {
        temp=temp.replace("-","-0") ;
    }
    if (temp.indexOf(",")==temp.length-1 && temp.indexOf(",")!=-1)
    {
        temp=temp+"00";
    }
    if (temp.indexOf(",")==0)
    {
        temp="0"+temp;
    }
    if (temp.indexOf(",")==1 && temp.indexOf("-")==0)
    {
        temp=temp.replace("-","-0") ;
    }
    temp=temp.replace(",",".") ;
    obj.value=temp;
}
// end of price text-box allow numeric and allow 2 decimal points only
</script>

<input type="Text" id="id" value="" onblur="extractNumber(this,2,true);blockInvalid(this);" onkeyup="extractNumber(this,2,true);" onkeypress="return blockNonNumbers(this, event, true, true);">

1

Alanınızı Income
doğrulamanız gerektiğinde , metin kutusu alan adınızın Bu doğrulama yöntemini çağır olduğunu varsayalım :

function validate() {
    var currency = document.getElementById("Income").value;
      var pattern = /^[1-9]\d*(?:\.\d{0,2})?$/ ;
    if (pattern.test(currency)) {
        alert("Currency is in valid format");
        return true;
    } 
        alert("Currency is not in valid format!Enter in 00.00 format");
        return false;
}

1

@ Rebisco'nun cevabını genişletmek. aşağıdaki kod, metin kutusunda yalnızca sayılara ve tek '.' (nokta) 'ya izin verecektir.

function isNumberKey(evt) {
        var charCode = (evt.which) ? evt.which : event.keyCode;
        if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57)) {
            return false;
        } else {
            // If the number field already has . then don't allow to enter . again.
            if (evt.target.value.search(/\./) > -1 && charCode == 46) {
                return false;
            }
            return true;
        }
    }

1

Daha iyi çözüm

var checkfloats = function(event){
    var charCode = (event.which) ? event.which : event.keyCode;
    if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57))
        return false;

    if(event.target.value.indexOf('.') >=0 && charCode == 46)
        return false;

    return true;
}

1

Ben bunun üstesinden gelmeyi seçtim oninputKlavye yapıştırma, fare yapıştırma ve tuş vuruşları sorununu etkinlikte . Ondalık veya tamsayı doğrulamayı belirtmek için doğru veya yanlış geçirin.

Temelde üç tek astarda üç adım. Ondalık sayıları kesmek istemiyorsanız, üçüncü adımı yorumlayın. Üçüncü adımda da yuvarlama için ayarlamalar yapılabilir.

// Example Decimal usage;
// <input type="text"  oninput="ValidateNumber(this, true);" />
// Example Integer usage:
// <input type="text"  oninput="ValidateNumber(this, false);" />
function ValidateNumber(elm, isDecimal) {
    try {

        // For integers, replace everything except for numbers with blanks.
        if (!isDecimal) 
            elm.value = elm.value.replace(/[^0-9]/g, ''); 
        else {
            // 1. For decimals, replace everything except for numbers and periods with blanks.
            // 2. Then we'll remove all leading ocurrences (duplicate) periods
            // 3. Then we'll chop off anything after two decimal places.

            // 1. replace everything except for numbers and periods with blanks.
            elm.value = elm.value.replace(/[^0-9.]/g, '');

            //2. remove all leading ocurrences (duplicate) periods
            elm.value = elm.value.replace(/\.(?=.*\.)/g, '');

            // 3. chop off anything after two decimal places.
            // In comparison to lengh, our index is behind one count, then we add two for our decimal places.
            var decimalIndex = elm.value.indexOf('.');
            if (decimalIndex != -1) { elm.value = elm.value.substr(0, decimalIndex + 3); }
        }
    }
    catch (err) {
        alert("ValidateNumber " + err);
    }
}

0

@Rebisco yanıtından başlayarak:

function count_appearance(mainStr, searchFor) {
    return (mainStr.split(searchFor).length - 1);
}
function isNumberKey(evt)
{
    $return = true;
    var charCode = (evt.which) ? evt.which : event.keyCode;
    if (charCode != 46 && charCode > 31
            && (charCode < 48 || charCode > 57))
        $return = false;
    $val = $(evt.originalTarget).val();
    if (charCode == 46) {
        if (count_appearance($val, '.') > 0) {
            $return = false;
        }
        if ($val.length == 0) {
            $return = false;
        }
    }
    return $return;
}

Yalnızca şu biçime izin verir: 123123123 [.121213]

Demo burada demo


0

Umarım sizin için çalışacaktır.

<input type="text" onkeypress="return chkNumeric(event)" />

<script>
    function chkNumeric(evt) {
        evt = (evt) ? evt : window.event;
        var charCode = (evt.which) ? evt.which : evt.keyCode;
        if (charCode > 31 && (charCode < 48 || charCode > 57)) {
            if (charCode == 46) { return true; }
            else { return false; }
        }
        return true;
    }
</script>

0

Aşağıdaki kod benim için çalıştı

"Onkeypress" olaylı giriş kutusu aşağıdaki gibidir

<input type="text" onkeypress="return isNumberKey(this,event);" />

"İsNumberKey" işlevi aşağıdaki gibidir

function isNumberKey(txt, evt) {
  var charCode = (evt.which) ? evt.which : evt.keyCode;
  if (charCode == 46) {
    //Check if the text already contains the . character
    if (txt.value.indexOf('.') === -1) {
        return true;
    } else {
        return false;
    }
  } else {
    if (charCode > 31 && (charCode < 48 || charCode > 57))
        return false;
  }
  return true;
}


0

Burada verilen tüm cevaplar için, metin kutusundaki metnin bir kısmını seçip o kısmın üzerine yazmaya çalışırsak, işlerin çalışmadığını gözlemledim. Bu yüzden aşağıdaki gibi olan işlevi değiştirdim:

    <HTML>
  <HEAD>
    <SCRIPT language=Javascript>
       <!--
       function isNumberKey(evt)
       {
         var charCode = (evt.which) ? evt.which : event.keyCode;

if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57))
{
        return false;
}
 if (charCode == 46 && evt.srcElement.value.split('.').length>1 )
    {

        return false;

    } 

 if(evt.srcElement.selectionStart<evt.srcElement.selectionEnd)
    {
          return true;
    }

  if(evt.srcElement.value.split('.').length>1 && evt.srcElement.value.split('.')[1].length==2)
  {

     return false;
  }


    return true;
       }


       //-->
    </SCRIPT>
  </HEAD>
  <BODY>
    <INPUT id="txtChar" onkeypress="return isNumberKey(event)" 
           type="text" name="txtChar">
  </BODY>
</HTML>

0

Ondalık sayılar için ve ayrıca noktadan sonra ondalıklar için 2 basamaklı Negatif sayılara izin verir ... İşlevi şu şekilde değiştirdim:

<input type="text" id="txtSample" onkeypress="return isNumberKey(event,this)"/>



function isNumberKey(evt, element){

        var charCode = (evt.which) ? evt.which : event.keyCode
        if (charCode > 31 && (charCode < 48 || charCode > 57) && !(charCode == 46 || charCode == 8 || charCode == 45))
            return false;
        else {
            var len = $(element).val().length;

            // Validation Point
            var index = $(element).val().indexOf('.');
            if ((index > 0 && charCode == 46) || len == 0 && charCode == 46) {
                return false;
            }
            if (index > 0) {
                var CharAfterdot = (len + 1) - index;
                if (CharAfterdot > 3) {
                    return false;
                }
            }

            // Validating Negative sign
            index = $(element).val().indexOf('-');
            if ((index > 0 && charCode == 45) || (len > 0 && charCode == 45)) {
                return false;
            }
        }
        return true;
    }

0

girdiyi bir metin kutusuyla sınırlamanın alternatif bir yolu, böylece yalnızca sayıları kabul eder ve ondalık nokta html girdisi içinde javascript kullanmaktır. Bu benim için çalışıyor:

<input type="text" class="form-control" id="price" name="price" placeholder="Price" 
vrequired onkeyup="this.value=this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1')">

--Kabul eder--

9

9,99

--Kabul etme--

9,99,99

ABC


0
function isNumberKey(evt)
{
    var charCode = (evt.which) ? evt.which : evt.keyCode;

    if(charCode==8 || charCode==13|| charCode==99|| charCode==118 || charCode==46)
    {    
        return true;  
    }

    if (charCode > 31 && (charCode < 48 || charCode > 57))
    {   
        return false; 
    }
    return true;
}

Yalnızca sayıya izin verecek ve "" koymanıza izin verecektir. ondalık için.


0
<script type="text/javascript">

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

        return true;
    }

</script>

@Html.EditorFor(model => model.Orderids, new { id = "Orderids", Onkeypress=isNumberKey(event)})

Bu iyi çalışıyor.


0

Pure-Javascript örnek Canlı demosu ile en iyi ve çalışan çözüm: https://jsfiddle.net/manoj2010/ygkpa89o/

<script>
function removeCommas(nStr) {
    if (nStr == null || nStr == "")
        return ""; 
    return nStr.toString().replace(/,/g, "");
}

function NumbersOnly(myfield, e, dec,neg)
{        
    if (isNaN(removeCommas(myfield.value)) && myfield.value != "-") {
        return false;
    }
    var allowNegativeNumber = neg || false;
    var key;
    var keychar;

    if (window.event)
        key = window.event.keyCode;
    else if (e)
        key = e.which;
    else
        return true;
    keychar = String.fromCharCode(key);
    var srcEl = e.srcElement ? e.srcElement : e.target;    
    // control keys
    if ((key == null) || (key == 0) || (key == 8) ||
                (key == 9) || (key == 13) || (key == 27))
        return true;

    // numbers
    else if ((("0123456789").indexOf(keychar) > -1))
        return true;

    // decimal point jump
    else if (dec && (keychar == ".")) {
        //myfield.form.elements[dec].focus();
        return srcEl.value.indexOf(".") == -1;        
    }

    //allow negative numbers
    else if (allowNegativeNumber && (keychar == "-")) {    
        return (srcEl.value.length == 0 || srcEl.value == "0.00")
    }
    else
        return false;
}
</script>
<input name="txtDiscountSum" type="text" onKeyPress="return NumbersOnly(this, event,true)" /> 


0

Sorun üzerinde kendim çalışıyorum ve şu ana kadar sahip olduğum şey bu. Bu aşağı yukarı işe yarıyor, ancak yeni değer kontrolü nedeniyle sonradan eksi eklemek imkansız. Ayrıca virgülün binlik ayırıcı olarak kullanılmasına izin vermez, yalnızca ondalık.

Mükemmel değil ama bazı fikirler verebilir.

app.directive('isNumber', function () {
            return function (scope, elem, attrs) {
                elem.bind('keypress', function (evt) {
                    var keyCode = (evt.which) ? evt.which : event.keyCode;
                    var testValue = (elem[0].value + String.fromCharCode(keyCode) + "0").replace(/ /g, ""); //check ignores spaces
                    var regex = /^\-?\d+((\.|\,)\d+)?$/;                        
                    var allowedChars = [8,9,13,27,32,37,39,44,45, 46] //control keys and separators             

                   //allows numbers, separators and controll keys and rejects others
                    if ((keyCode > 47 && keyCode < 58) || allowedChars.indexOf(keyCode) >= 0) {             
                        //test the string with regex, decline if doesn't fit
                        if (elem[0].value != "" && !regex.test(testValue)) {
                            event.preventDefault();
                            return false;
                        }
                        return true;
                    }
                    event.preventDefault();
                    return false;
                });
            };
        });

Şunları sağlar:

11 11 .245 (bulanıklıkta 1111.245 olarak biçimlendirilmiş denetleyicide)

11,44

-123.123

-1 014

0123 (bulanıklıkta 123 olarak biçimlendirilmiştir)

izin vermez:

! @ # $ / *

ABC

11.11.1

11,11.1

.42


0
<input type="text" onkeypress="return isNumberKey(event,this)">

<script>
   function isNumberKey(evt, obj) {

            var charCode = (evt.which) ? evt.which : event.keyCode
            var value = obj.value;
            var dotcontains = value.indexOf(".") != -1;
            if (dotcontains)
                if (charCode == 46) return false;
            if (charCode == 46) return true;
            if (charCode > 31 && (charCode < 48 || charCode > 57))
                return false;
            return true;
        }


</script>

0

Bu sorunun çok eski olduğunu biliyorum ama yine de sık sık bu tür gereksinimler alıyoruz. Pek çok örnek var, ancak çoğu basit bir uygulama için fazla ayrıntılı veya karmaşık görünüyor .

Bu https://jsfiddle.net/vibs2006/rn0fvxuk/ sayfasına bakın ve geliştirin (eğer yapabiliyorsanız). IE, Firefox, Chrome ve Edge Tarayıcıda çalışır.

İşte çalışma kodu.

        
        function IsNumeric(e) {
        var IsValidationSuccessful = false;
        console.log(e.target.value);
        document.getElementById("info").innerHTML = "You just typed ''" + e.key + "''";
        //console.log("e.Key Value = "+e.key);
        switch (e.key)
         {         
             case "1":
             case "2":
             case "3":
             case "4":
             case "5":
             case "6":
             case "7":
             case "8":
             case "9":
             case "0":
             case "Backspace":             
                 IsValidationSuccessful = true;
                 break;
                 
						 case "Decimal":  //Numpad Decimal in Edge Browser
             case ".":        //Numpad Decimal in Chrome and Firefox                      
             case "Del": 			// Internet Explorer 11 and less Numpad Decimal 
                 if (e.target.value.indexOf(".") >= 1) //Checking if already Decimal exists
                 {
                     IsValidationSuccessful = false;
                 }
                 else
                 {
                     IsValidationSuccessful = true;
                 }
                 break;

             default:
                 IsValidationSuccessful = false;
         }
         //debugger;
         if(IsValidationSuccessful == false){
         
         document.getElementById("error").style = "display:Block";
         }else{
         document.getElementById("error").style = "display:none";
         }
         
         return IsValidationSuccessful;
        }
Numeric Value: <input type="number" id="text1" onkeypress="return IsNumeric(event);" ondrop="return false;" onpaste="return false;" /><br />
    <span id="error" style="color: Red; display: none">* Input digits (0 - 9) and Decimals Only</span><br />
    <div id="info"></div>


0
<input type="text" onkeypress='return event.charCode >= 48 && event.charCode <= 57'>

ASCII değer aralığını belirterek, kullanıcı tarafından girilecek değerleri kısıtlayabilirsiniz.
Örnek : Sayısal değerler için 48 - 57 (0 - 9)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.