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

时间:2014-08-11 23:18:10

标签: javascript regex validation

我使用了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);

}

我想做一些类似的事情,阻止用户输入数字但仅限于第一个字符。我该怎么做?以上代码是否在正确的轨道上?为了解决这个问题,我的正则表达式应该是什么样的?

提前感谢您的帮助!

5 个答案:

答案 0 :(得分:0)

这样的事情应该有效:

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

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

大多数浏览器都支持oninput(),这应该涵盖大多数情况,但是如果您支持旧版浏览器,那么您希望将其修补回常见的嫌疑人(keydown,粘贴,更改)。

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

使用html5验证也很好,例如:

 <input pattern=/^\D/ > 

为非js用户。奖励:它涵盖了所有改变价值的事件,您不必在js中手动处理单个事件。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

不要使用正则表达式。

试试这个:

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事件,这应该有用。

答案 3 :(得分:0)

正如我在评论中所说,很难阻止输入字段的所有操作方式(拖放,粘贴,剪切,删除),因此在使用之前最终需要验证字段

如果你想阻止在字段中输入第一个字符的数字,你可以使用:

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/

答案 4 :(得分:0)

我认为您要检查表单输入字段的输入。 如果逐个检查字符,则不能使用单个正则表达式执行此操作,因为您只会针对字符测试正则表达式。

你必须使用javascript吗?如果它只是客户端验证,您可以在输入元素上使用HTML5中可用的模式属性。下面是一个例子: (如果您愿意,可以用授权字符替换点数)

否则,如果你想坚持使用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)))检查它是否为数字