繁体   English   中英

在JavaScript中,如何防止在表单字段中键入数字作为第一个字符?

[英]In JavaScript, how can I prevent a number from being typed as the first character in a form field?

我使用JavaScript来防止将特定字符输入到字段中。 以下功能可防止输入数字。 它还会检查每个键入的字符,如果是数字,则阻止输入。

function LettersOnly(e) {

    var key = window.event ? e.keyCode : e.which;

    var keychar = String.fromCharCode(key);

    var reg = new RegExp("[A-Za-z + ']");

    return reg.test(keychar);

}

我想做类似的事情,阻止用户输入数字,但前提是它是第一个字符。 我该怎么做? 上面的代码是否正确? 为了实现这一点,我的正则表达式应该是什么样?

先谢谢您的帮助!

就像我在评论中说过的那样,很难防止对输入字段进行所有方式的操作(拖放/粘贴,剪切,删除),因此您最终需要在使用该字段之前对其进行验证。

也就是说,如果您要防止在字段的第一个字符中键入数字,可以使用以下命令:

document.getElementById("test").addEventListener("keypress", function(e) {
    var key = e.which || e.keyCode;
    if (this.selectionStart === 0) {
        if (key > 48 && key < 57) {
            e.preventDefault();
        }
    }
});

工作演示: http : //jsfiddle.net/jfriend00/mnm4bta1/

这样的事情应该工作:

function LettersOnly(e) {    
   e.target.value= /^\D/.test(e.target.value) ? e.target.value : "";
}

您还可以使用上述函数在oninput(),onpaste()和其他文本注入事件(不仅是键事件)上验证该规则。 输入的文本必须不为空并且不能以数字开头。

大多数浏览器都支持oninput(),该方法应涵盖大多数情况,但如果您支持旧版浏览器,则需要将其修补为常见的可疑对象(击键,粘贴,更改)。

注意:我更改了OP代码的精神,以实际上阻止这些输入更改输入。

例如,使用html5验证也将是一件好事:

 <input pattern=/^\D/ > 

对于非js用户。 红利:它涵盖了所有更改值的事件,您无需在js中手动处理单个事件。

您不需要使用regx,只需测试它是否为数字。 由于它必须以字母数字开头,因此该条目不是数字。 我刚刚回答了一个非常相似的问题,该问题需要一些代码来检测输入的内容并采取行动。

 function checkInp(value)
{
      if (isNaN(value)) {
          alert("Must input numbers");
          return false;
      }
}

不要使用正则表达式。

尝试这个:

function getCaretPosition(oField) {
  var iCaretPos = 0;
  if (document.selection) {
    oField.focus();
    var oSel = document.selection.createRange();
    oSel.moveStart ('character', -oField.value.length);
    iCaretPos = oSel.text.length;
  }
  else if (oField.selectionStart || oField.selectionStart == '0')
    iCaretPos = oField.selectionStart;

  return (iCaretPos);
}

function LettersOnly(e){
    return getCaretPosition(e.target) === 1 && e.keyCode > 48 && e.keyCode < 58;
}

如果将LettersOnly绑定到输入的oninput事件,则此方法应该起作用。

我认为您要检查来自表单输入字段的输入。 如果您一个接一个地检查字符,则无法使用单个正则表达式执行此操作,因为您只会针对某个字符测试该正则表达式。

您必须为此使用javascript吗? 如果仅是客户端验证,则可以在输入元素上使用HTML5提供的pattern属性。 在一个示例下面:(如果需要,请用您授权的字符替换该点)

否则,如果您想使用javascript,我认为该功能应如下所示:

 function LettersOnly(e) {

    var key = window.event ? e.keyCode : e.which;

    var keychar = String.fromCharCode(key);

    if (document.getElementById('inputfield').val.length === 0 
    && !isNaN(parseInt(keychar)))) {
        return false;
    }
    var reg = new RegExp("[A-Za-z + ']");

    return reg.test(keychar);

}

document.getElementById('inputfield').val.length === 0检查输入字段中的字符串是否为空(即我们在当前字符处是第一个)替换或改写测试是否适用于某些内容而不是HTML表单的输入字段。

!isNaN(parseInt(keychar)))检查是否为数字

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM