防止在文本框中输入非 ascii 字符

Posted

技术标签:

【中文标题】防止在文本框中输入非 ascii 字符【英文标题】:prevent typing non ascii characters in a textbox 【发布时间】:2009-10-02 13:31:17 【问题描述】:

因为我认为人们在我之前已经遇到了很多时间,并且可能有一些标准的解决方案.. 任何人都可以给出任何提示方向如何防止用户在文本框中输入非 ascii 字符。

【问题讨论】:

你需要做这个客户端吗?为什么不在服务器端做呢?这样,即使用户关闭了 javascript,您仍然可以删除不需要的字符。此外,阻止用户输入非 ASCII 字符似乎有点幼稚,有点过时 ;-) “非 ASCII”是什么意思? Unicode 字符?还是只是超出 0-127 范围的字符? 【参考方案1】:

我个人觉得修改标准交互模式有点烦人,但如果你必须过滤键盘输入,你可以通过拦截按键事件并取消你不想要的事件来做到这一点:

var allowed = /[a-zA-Z0-9]/; // etc.

window.onload = function () 
    var input = document.getElementById("test");

    input.onkeypress = function () 
        // Cross-browser
        var evt = arguments[0] || event;
        var char = String.fromCharCode(evt.which || evt.keyCode);

        // Is the key allowed?
        if (!allowed.test(char)) 
            // Cancel the original event
            evt.cancelBubble = true;
            return false;
        
    
;

而且使用 jQuery 更简洁漂亮:

var allowed = /[a-zA-Z0-9]/; // etc.

$(function () 
    var input = document.getElementById("test");

    $("#input").keypress(function (e) 
        // Is the key allowed?
        if (!allowed.test(String.fromCharCode(e.keyCode || e.which))) 
            // Cancel the original event
            e.preventDefault();
            e.stopPropagation();
        
    );
);

【讨论】:

你的正则表达式应该是“var allowed = /[a-zA-Z0-9]/;” @Vlad:感谢您的关注!固定。 这里有一个问题,它不允许用户退格/删除来更正他在字段中输入的内容,也不允许用户使用箭头键在字段中移动.有没有比将其添加到函数开头更优雅的方法来处理这个问题: if (e.keyCode == 8) return; if (e.keyCode == 37) 返回;如果(e.keyCode == 38)返回;如果(e.keyCode == 39)返回; if (e.keyCode == 40) return;【参考方案2】:

如果您正在寻找一个简洁的 ASP.NET 解决方案,您可以使用 RegularExpressionValidator 控件来限制 ASP.NET 文本框的内容。除了页面标记定义和用于验证的正则表达式之外,您无需编写任何服务器或客户端代码。验证将在双方进行检查。

例如:

<asp:TextBox id="txtItem" runat="server" MaxLength="50"></asp:TextBox>
<asp:RegularExpressionValidator id="SomeFieldValidator" runat="server" 
  CssClass="SomeClass" ControlToValidate="txtItem" 
  ErrorMessage="This field only accepts ASCII input." Display="Dynamic"
  ValidationExpression="^[A-Za-z0-9]*$"></asp:RegularExpressionValidator>

在这个sn-p中,txtItem就是需要验证的TextBox。 SomeFieldValidator 控件使用 ControlToValidate 属性链接到 txtItem 控件。 ValidationExpression 属性是用于强制文本框内容的正则表达式。根据文档,此表达式需要编写为与 JScript 和 .NET Regex 正则表达式兼容。另外,我在这里只将正则表达式设置为字母数字字符。您可能需要考虑使用类似 ^[\w\s]*$ 的东西 - 如果您真的对可打印字符感兴趣,而不仅仅是 ASCII。

使用此技术的另一个好处是,您还可以将这些验证器插入到可更新应用程序的 .aspx 页面中,而无需重新启动应用程序池。

RequiredFieldValidator 控件也很方便。您可以将这些与附加了 RegularExpressionValidatorTextBox 控件链接。这些处理需要在 TextBox 中输入的情况。

这里有一些参考链接。

RegularExpressionValidator Control at MSDN

RequiredFieldValidator Control at MSDN

Character Classes at MSDN (for Regular Expressions)

JavaScript RegExp Object Reference

【讨论】:

以上是关于防止在文本框中输入非 ascii 字符的主要内容,如果未能解决你的问题,请参考以下文章

如何防止用户在文本框中输入特殊字符[重复]

如何防止在文本框中粘贴非数值?

如何防止用户在文本框中粘贴文本?

从html输入文本框中按回车键时如何防止回发?

防止用户在 html5 日期文本框中输入

在输入/复制到富文本框时防止闪烁