【发布时间】:2025-12-14 19:25:08
【问题描述】:
在文本框中只允许字母/数字的最简单方法是什么。我们正在使用 JS/jQuery,但不想使用验证插件?
【问题讨论】:
标签: javascript jquery validation forms
在文本框中只允许字母/数字的最简单方法是什么。我们正在使用 JS/jQuery,但不想使用验证插件?
【问题讨论】:
标签: javascript jquery validation forms
我的解决方案是这样的:
jQuery('input[type="text"]').keyup(function() {
var raw_text = jQuery(this).val();
var return_text = raw_text.replace(/[^a-zA-Z0-9 _]/g,'');
jQuery(this).val(return_text);
});
每当用户尝试输入除数字、字母、空格或下划线以外的任何内容时,该函数都会返回一个带有已删除带状字符的字符串。
【讨论】:
您可以在表单提交上使用简单的正则表达式来评估文本框的内容、显示错误并停止表单提交。制作一个功能,当文本框失去焦点时,您也可以应用它。经常这样做,你会发现你已经重新实现了验证插件。
$(function() {
$('form').submit( function() {
return validateTB( $('#textbox'), true, $('#textboxError') );
});
$('#textbox').blur( function() {
validateTB( $(this), true, $('#textboxError') );
});
function validateTB(tb,required,msg) {
var $tb = $(tb);
var re = '/^[a-z0-9]';
if (required) {
re += '+';
}
else {
re += '*';
}
re += '$/';
if ($tb.val().match(re) == null) {
$(msg).show();
return false;
}
$(msg).hide();
return true;
}
});
【讨论】:
如果你不想使用插件 - 一些普通的旧 JS 验证呢?
我不久前在我的博客上发布过这个 --> http://dotnetbutchering.blogspot.com/2009/04/definitive-javascript-validation-with.html
您会看到我提出的解决方案中的函数需要一个输入字段 ID 和一个正则表达式(并且您必须想出一个正则表达式来满足您的验证需求,如果您只想要 aplhanumeric 应该很简单)和根据验证的结果将控件的背景设置为绿色或红色。我知道它并不完美,但我认为它足以让您继续前进,您可以以此为起点来打造自己的产品。
我确信有一些使用 jQuery 或纯 JS 的优雅解决方案,但到目前为止,这些方面的一些东西对我来说效果很好。
希望对你有帮助。
【讨论】:
由于 tvanfossen 的 sn-p 仅在提交时触发,而 Ian 的效果不如预期,我只想添加一个更简洁的方法:
HTML:
<input id="myinput" type="text">
JS(jQuery):
$('#myinput').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;
});
【讨论】:
#$%^&*() 时,我发现此方法存在问题,它不会阻止这些章程
Ian 答案的一个变体更轻量级和更短:
function onlyAllowAlphanumeric() {
this.value = this.value.replace(/[^a-zA-Z0-9 _]/g, '');
});
$('input[type="text"]').keyup(onlyAllowAlphanumeric);
【讨论】:
这是一个简单的解决方案,它将检查 keyup 上的输入并在用户键入时删除不需要的字符:
<input class="usr" type="text id="whatever" name="whatever" />
$(".usr").keyup(function() {
var n = $(this).val();
if ( n.match("^[a-zA-Z0-9 ]*$") == null ) {
$(this).val(n.slice(0,-1));
}
});
可以更改正则表达式以适应规范。
【讨论】: