防止在文本框中输入非 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 控件也很方便。您可以将这些与附加了 RegularExpressionValidator 的 TextBox 控件链接。这些处理需要在 TextBox 中输入的情况。
这里有一些参考链接。
RegularExpressionValidator Control at MSDN
RequiredFieldValidator Control at MSDN
Character Classes at MSDN (for Regular Expressions)
JavaScript RegExp Object Reference
【讨论】:
以上是关于防止在文本框中输入非 ascii 字符的主要内容,如果未能解决你的问题,请参考以下文章