只允许英文字符和数字进行文本输入

Posted

技术标签:

【中文标题】只允许英文字符和数字进行文本输入【英文标题】:only allow English characters and numbers for text input 【发布时间】:2011-10-31 22:21:00 【问题描述】:

现场演示:http://jsfiddle.net/thisizmonster/DveuB/

如何更改此设置,以便在输入时只允许输入字符 A-Z、a-z、0-9,而不使用正则表达式?

【问题讨论】:

你要的方法叫keypress,不是keyPress 为什么没有正则表达式?使用正则表达式真的很容易! 您仍然需要为控制字符添加一个特殊情况。 因为我不懂正则表达式!你能帮我做吗? "while typing" 那么鼠标复制粘贴或者其他类型的非键盘输入可以吗? 【参考方案1】:

假设你也想接受空格:

$("#user").keypress(function(event)
    var ew = event.which;
    if(ew == 32)
        return true;
    if(48 <= ew && ew <= 57)
        return true;
    if(65 <= ew && ew <= 90)
        return true;
    if(97 <= ew && ew <= 122)
        return true;
    return false;
);

如果您不想接受空格,请删除 if(ew == 32) return true;

JSFiddle

【讨论】:

我刚刚在 OSX 上的文本框中输入了一个 é (alt-e-e),但它确实停止了 µ。 Safari 和 Firefox 都不会触发 OSX 上组合字符的按键事件。 @Gerelt 查看我更新的帖子以获取新链接,以防止“mu 太短”在谈论! 不好的是用户可以粘贴格式错误的字符串 @Mir for Backspace 添加if (ew == 8) return true; 能否就如何避免或限制 ý、Ý â、ê、î、ô、û 等字符输入或粘贴到输入字段中提供想法?【参考方案2】:

&lt;input type="text" id="firstName"  onkeypress="return (event.charCode &gt;= 65 &amp;&amp; event.charCode &lt;= 90) || (event.charCode &gt;= 97 &amp;&amp; event.charCode &lt;= 122) || (event.charCode &gt;= 48 &amp;&amp; event.charCode &lt;= 57)" /&gt;

ASCII 字符集:https://www.w3schools.com/charsets/ref_html_ascii.asp

【讨论】:

请注意,这不会阻止用户将不需要的字符复制并粘贴到输入字段中。 您可以将“onkeypress”更改为“onblur”。【参考方案3】:

所有其他答案都可以不要阻止复制和粘贴非英文字符。

‌以下代码适用于(按键复制粘贴):

<input type="text" name="text" oninput="this.value=this.value.replace(/[^A-Za-z\s]/g,'');">

【讨论】:

【参考方案4】:

你可以这样做:http://jsfiddle.net/DveuB/1/

那么只有0-9,a-z和A-Z

$(function()
    $("#user").keypress(function(event)
        if ((event.charCode >= 48 && event.charCode <= 57) || // 0-9
            (event.charCode >= 65 && event.charCode <= 90) || // A-Z
            (event.charCode >= 97 && event.charCode <= 122))  // a-z
            alert("0-9, a-z or A-Z");
    );
);

更新: http://jsfiddle.net/DveuB/4/ 为了防止@mu 所说的:

$("#user").keyup(function(event)
    if (event.altKey == false && event.ctrlKey == false)
        if ((event.keyCode >= 48 && event.keyCode <= 57 && event.shiftKey== false) ||
            (event.keyCode >= 65 && event.keyCode <= 90) ||
            (event.keyCode >= 97 && event.keyCode <= 122))
            alert("0-9, a-z or A-Z");
);

【讨论】:

我可以在 Safari 和 Firefox 的 OSX 上获得一个组合字符(例如由 alt-ee 构建的 é),这些字符似乎不会触发按键事件。 if(event.keyCode == 8) return true; 答案错过了。你应该测试重复“点”(。)你可以输入多个。【参考方案5】:
<html>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
$(document).ready(function () 

  $('.clsAlphaNoOnly').keypress(function (e)   // Accept only alpha numerics, no special characters 
        var regex = new RegExp("^[a-zA-Z0-9 ]+$");
        var str = String.fromCharCode(!e.charCode ? e.which : e.charCode);
        if (regex.test(str)) 
            return true;
        

        e.preventDefault();
        return false;
    ); 
)
</script>

<body>

<input class='clsAlphaNoOnly' type='text'>
</body>
</html>

【讨论】:

【参考方案6】:

我正在使用这个功能。

通过修改 RegExp,你可以去掉任何你个人不喜欢的字符。

$(function()
    $("#user").bind('keypress',function(e)
        var regex = new RegExp("^[a-zA-Z0-9 ]+$");
        var str = String.fromCharCode(!e.charCode ? e.which : e.charCode);
        if (regex.test(str)) return true;
        e.preventDefault();
        return false;
    );
);

【讨论】:

【参考方案7】:

认为您必须编写一些 if 语句或类似的东西,获取键码并根据一些代表其他键码的数字对其进行验证:

例如: if(keycode < 80) return false;

【讨论】:

此代码将阻止您使用退格键。您需要处理控制字符并始终允许它们。 这只是示例。当然,您需要弄清楚您想要允许哪些代码(例如退格、箭头等)以及您想要忽略哪些代码。 这和 OSX 上的 321X 有同样的问题。

以上是关于只允许英文字符和数字进行文本输入的主要内容,如果未能解决你的问题,请参考以下文章

Winforms 文本框允许用户只输入字母、数字、点和单词之间的空格。正则表达式

WinForm笔记一:文本框只允许输入数字

Objective-C如何限制文本字段在2次输入后只允许特定字符

一个文本框只允许输入数字

只允许在文本框中输入数字[重复]

在 type=text Ionic 的离子输入中只允许数字