我使用了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);
}
我想做一些类似的事情,阻止用户输入数字但仅限于第一个字符。我该怎么做?以上代码是否在正确的轨道上?为了解决这个问题,我的正则表达式应该是什么样的?
提前感谢您的帮助!
答案 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();
}
}
});
答案 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)))
检查它是否为数字