我正在使用jQuery的.alphanumeric插件,当用户直接在文本框中输入时,它肯定正在做我期望的事情。但是,如果用户要将值复制并粘贴到文本框中,则所有投注均已关闭。
$("#<%= txtNumber.ClientID %>").alphanumeric({allow:"-"});
我当然可以这样做:
$(document).ready(function() {
$("#<%= txtNumber.ClientID %>").blur(function() {
$("#<%= txtNumber.ClientID %>").val(
RemoveInvalidCharacters(
$("#<%= txtNumber.ClientID %>").val()
)
);
});
});
//FUNCTION REMOVES ANY ; IN TEXT TO PREVENT SQL INJECTION
function RemoveInvalidCharacters(text) {
return text.replace(';', '');
}
但是......我宁愿不必使用.blur()函数进一步克隆我的代码。还有其他方法吗?
答案 0 :(得分:3)
处理粘贴事件非常简单。我在masked input plugin中使用这种技术效果很好。随意浏览源代码以查看其使用情况。
以下是针对上述示例修改的相关位。
var pasteEventName = $.browser.msie ? 'paste' : 'input';
$("#<%= txtNumber.ClientID %>").bind(pasteEventName, function() {
setTimeout(function() {
RemoveInvalidCharacters(
$("#<%= txtNumber.ClientID %>").val()
);
}, 0);
});
答案 1 :(得分:1)
我在这里找到了这个解决方案: http://www.devcurry.com/2009/10/allow-only-alphanumeric-characters-in.html
<script type="text/javascript">
$(function() {
$('input.alpha').keyup(function() {
if (this.value.match(/[^a-zA-Z0-9 ]/g)) {
this.value = this.value.replace(/[^a-zA-Z0-9 ]/g, '');
}
});
});
</script>
<input type="text" name="test" value="" class="alpha">
答案 2 :(得分:1)
我也需要解决粘贴问题,我想出了一些对我有用的东西。一个人仍然可以使用编辑&gt;粘贴在浏览器菜单中,但会处理Ctrl-V以及右键单击粘贴。经过FF,IE,Opera,Safari,Chrome测试:
<!DOCTYPE html>
<html>
<head>
<title>Only Allow Certain Characters</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
</head>
<body>
<br>
<form id="myform" action="">
<input id="element1" name="mytext1" type="text">
<input id="element2" name="mytext2" type="text">
</form>
<script>
/* removes evil chars while typing */
(function($){
$.fn.disableChars = function(a) {
a = $.extend({
allow: ''
}, a);
b = a.allow.split('');
for ( i=0; i<b.length; i++) b[i] = "\\" + b[i];
a.allow = b.join('');
var regex = new RegExp('[^a-z0-9' + a.allow + ']', 'ig');
$(this)
.bind('keyup blur', function() {
if (this.value.search(regex) != '-1') {
this.value = this.value.replace(regex, '');
}
})
.bind('contextmenu',function () {return false});
}
})(jQuery);
$("#element1").disableChars();
$("#element2").disableChars({allow:".,:-() "});
</script>
</body>
</html>
答案 3 :(得分:0)
复制和粘贴绝对是屏蔽输入的挑战。
在提交表单时,您是否考虑过“编码”特殊字符,而不是在用户输入值时?我们做同样的事情让用户输入&lt;和&gt; TextBoxes中的字符(我们将它们转换为&amp; lt;和&amp; gt;通过javascript然后返回到&lt;和&gt;后面的代码中。
答案 4 :(得分:0)
这样您就不会阻止SQL注入。我不需要使用您的表单,我可以制作我的表格并将其发布到您的脚本中。更简单:我可以禁用javascript并删除你的数据库。
相反,检查服务器端的输入有效性。
最简单的方法是逃避它或使用参数化查询。