因为我认为人们在我做之前已经遇到了很多时间,并且可能会有一些标准的解决方案。任何人都可以给出任何提示方向,以防止用户在文本框中键入非ascii字符。
答案 0 :(得分:2)
我个人觉得修改标准交互模式有点烦人,但是如果你必须过滤键盘输入,你可以通过截取按键事件并取消你不想要的事件来做到这一点:
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();
}
});
});
答案 1 :(得分:1)
如果您正在寻找简洁的ASP.NET解决方案,则可以使用RegularExpressionValidator控件来限制ASP.NET TextBox的内容。除了页面标记定义和用于验证的正则表达式之外,您不必编写任何服务器或客户端代码。验证将由双方检查。
例如:
<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>
在此代码段中, txtItem 是需要验证的TextBox。 SomeFieldValidator 控件使用 ControlToValidate 属性链接到 txtItem 控件。 ValidationExpression 属性是用于强制TextBox内容的正则表达式。根据文档,需要编写此表达式以兼容JScript和.NET Regex正则表达式。另外,我只在这里将正则表达式设置为字母数字字符。您可能需要考虑使用类似 ^ [\ w \ s] * $ 的内容 - 如果您确实对可打印字符感兴趣而不仅仅是ASCII。
使用此技术的另一个好处是您还可以将这些验证器插入可更新应用程序的.aspx页面,而不需要重新启动应用程序池。
RequiredFieldValidator 控件也很方便。您可以将这些与 TextBox 控件相关联,这些控件也附加了 RegularExpressionValidator 。这些处理需要在 TextBox 中输入的情况。
以下是一些参考链接。
RegularExpressionValidator Control at MSDN
RequiredFieldValidator Control at MSDN