2016-10-05 63 views
0

我只想接受输入中的字母,数字和逗号。只接受输入中的数字和字母

我已经试过

document.getElementById('input').onkeydown = function (e) { 
    const charCode = (typeof e.which === 'number') ? e.which : e.keyCode; 
    return (charCode >= 48 && charCode <= 57) || // numbers 
     (charCode >= 65 && charCode <= 90) || // letters 
     charCode === 188      // comma 
}; 

它的工作原理,但它也拒绝使用箭头键,回车,删除和退格(和潜在的其他重要的键)。

我可以添加另一个or子句,并告诉用户是否按下了箭头键,输入,删除或退格键,但这是正确的方法吗?我是否缺少一些钥匙?平板电脑,台式机和智能手机的关键代码是否相同?

编辑

,如果我还希望确保用户永远不会输入两个连续的逗号呢?所以它不会接受a,b,,c

+0

会',1'是有效的输入?您能否在问题中包含对预期有效,无效输入的描述? – guest271314

回答

1

根据MDN,charCodewhich都被弃用,他们推荐使用keyboardEvent.key

有趣的是,您为此问题标记了regex,但我没有明确地在您的问题中看到正则表达式。但是,下面的示例应该足够了。见String.prototype.match约在大多数浏览器原生支持正则表达式的详细信息...

document.getElementById('input').onkeydown = function (e) { 
 
    var value = e.target.value; 
 
    //only allow a-z, A-Z, digits 0-9 and comma, with only 1 consecutive comma ... 
 
    if (!e.key.match(/[a-zA-Z0-9,]/) || (e.key == ',' && value[value.length-1] == ',')) { 
 
    e.preventDefault(); 
 
    } 
 
};
Type Value: <input id="input" type="text" />

你也可以使用character classes - 例如\d\w,虽然\w包括下划线(_):

document.getElementById('input').onkeydown = function (e) { 
 
    var value = e.target.value; 
 
    //only allow a-z, A-Z, digits 0-9 and comma, with only 1 consecutive comma ... 
 
    if (e.key.match(/_/) || !e.key.match(/[\w\d,]/) || (e.key == ',' && value[value.length-1] == ',')) { 
 
    e.preventDefault(); 
 
    } 
 
};
Type Value: <input id="input" type="text" />

+0

看来我不能在Chrome中使用'e.key'?这不是很奇怪吗?我正在使用版本47.0.2526.106。 – mortensen

+1

啊 - 我正在使用版本53.0.2785.143 ... MDN报告[KeyboardEvent.key](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key)在Chrome上受支持51+ - 我选择这个是因为[charCode](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/charCode)和[which](https://developer.mozilla.org/ en-US/docs/Web/API/KeyboardEvent /哪个)都被弃用......也是 - 扩展ASCII字符还好,比如口音:ñ,é,É等等...? –

相关问题