允许十进制没有输入到文本框并使用javascript验证

时间:2015-07-08 07:20:24

标签: javascript html

我有一个需要接受十进制数输入的文本框,如果不止一次,则禁止其他字符和点输入。我使用以下方法进行相同的

$('#BankEMI').keydown(function (e) {
        var key1 = e.keyCode;
        if (key1 == 190 || key1 == 110) {
            var s = $('#BankEMI').val();
            if (s.indexOf('.') > - 1) {
                e.preventDefault();
                return false
            }
            return true
        }
        if (key1 == 13 || key1 == 8 || key1 == 9 || key1 == 46 || (key1 >= 35 && key1 <= 40)) {
            return true
        }
        if (e.shiftKey || e.ctrlKey || e.altKey) {
            e.preventDefault()
        } else {
            var key = e.keyCode;
            if (!((key >= 48 && key <= 57) || (key >= 96 && key <= 105))) {
                e.preventDefault()
            }
        }
    })
});

BankEMI-是输入框。 我需要支持4100.50的种类 到目前为止,我没有对小数位进行任何限制,因为我在计算之后将值向上舍入到2位小数。因此,如果用户输入4100.524,它将被舍入并使用。 可以有更简单的方法来解决这个问题吗?

3 个答案:

答案 0 :(得分:0)

您绝对应该使用正则表达式来执行此任务。 http://www.w3schools.com/jsref/jsref_obj_regexp.asp

答案 1 :(得分:0)

你可以试试这段代码,我在我的数字形式中使用它,但这并不能说明用多个小数点粘贴错误的文本(例如“123.123.123”)

$(':text').on('keypress', function(e) {
    var $this = $( this ),
    kWhich = e.which,
    kCode = e.keyCode,
    kChar = e.key,
    validKeys = [8, 46, 37, 39, 36, 35, 9 ], // backspace, del, left, right, home, end, tab
  ctrChars = new RegExp(/[vax]/gi);

    if (!(kChar.match( /[\d\.]/g ) || validKeys.indexOf(kCode) >= 0 || (e.ctrlKey && kChar.match(ctrChars))) || e.shiftKey) {
        e.preventDefault();
    }

  // Prevent multiple decimal points
  if (kChar.match(/\./gmi) && $this.val().match(/\./gmi))
    e.preventDefault();

  console.log('====\nkey:' + kChar+ '\nwhich:' + kWhich + '\nkeyCode:' + kCode);
}).on('paste', function(e) {
  var clipBoard = e.originalEvent.clipboardData.getData('text');
  console.log('paste:' + clipBoard);
  if (clipBoard.replace(/[\d\.]/gim, '').length > 0 || (clipBoard.match(/\./g) || []).length > 1)
    return false;
});

小提琴here

答案 2 :(得分:0)

假设输入标签的Id是“myID”,我尝试过的这种方法验证了你的情况,看起来更符合逻辑。

$("#myID").keydown(function(){

str=$("#myID").val();

if(isNaN(str) || ((str.indexOf('.')==-1)  && str.indexOf('.')!=str.lastIndexOf('.'))){
console.log("invalid")
}
});