只允许英文字符和数字进行文本输入
Posted
技术标签:
【中文标题】只允许英文字符和数字进行文本输入【英文标题】:only allow English characters and numbers for text input 【发布时间】:2011-10-31 22:21:00 【问题描述】:现场演示:http://jsfiddle.net/thisizmonster/DveuB/
如何更改此设置,以便在输入时只允许输入字符 A-Z、a-z、0-9,而不使用正则表达式?
【问题讨论】:
你要的方法叫keypress
,不是keyPress
。
为什么没有正则表达式?使用正则表达式真的很容易!
您仍然需要为控制字符添加一个特殊情况。
因为我不懂正则表达式!你能帮我做吗?
"while typing" 那么鼠标复制粘贴或者其他类型的非键盘输入可以吗?
【参考方案1】:
假设你也想接受空格:
$("#user").keypress(function(event)
var ew = event.which;
if(ew == 32)
return true;
if(48 <= ew && ew <= 57)
return true;
if(65 <= ew && ew <= 90)
return true;
if(97 <= ew && ew <= 122)
return true;
return false;
);
如果您不想接受空格,请删除 if(ew == 32) return true;
JSFiddle
【讨论】:
我刚刚在 OSX 上的文本框中输入了一个 é (alt-e-e),但它确实停止了 µ。 Safari 和 Firefox 都不会触发 OSX 上组合字符的按键事件。 @Gerelt 查看我更新的帖子以获取新链接,以防止“mu 太短”在谈论! 不好的是用户可以粘贴格式错误的字符串 @Mir forBackspace
添加if (ew == 8) return true;
能否就如何避免或限制 ý、Ý â、ê、î、ô、û 等字符输入或粘贴到输入字段中提供想法?【参考方案2】:
<input type="text" id="firstName" onkeypress="return (event.charCode >= 65 && event.charCode <= 90) || (event.charCode >= 97 && event.charCode <= 122) || (event.charCode >= 48 && event.charCode <= 57)" />
ASCII 字符集:https://www.w3schools.com/charsets/ref_html_ascii.asp
【讨论】:
请注意,这不会阻止用户将不需要的字符复制并粘贴到输入字段中。 您可以将“onkeypress”更改为“onblur”。【参考方案3】:所有其他答案都可以但不要阻止复制和粘贴非英文字符。
以下代码适用于(按键和复制粘贴):
<input type="text" name="text" oninput="this.value=this.value.replace(/[^A-Za-z\s]/g,'');">
【讨论】:
【参考方案4】:你可以这样做:http://jsfiddle.net/DveuB/1/
那么只有0-9,a-z和A-Z
$(function()
$("#user").keypress(function(event)
if ((event.charCode >= 48 && event.charCode <= 57) || // 0-9
(event.charCode >= 65 && event.charCode <= 90) || // A-Z
(event.charCode >= 97 && event.charCode <= 122)) // a-z
alert("0-9, a-z or A-Z");
);
);
更新: http://jsfiddle.net/DveuB/4/ 为了防止@mu 所说的:
$("#user").keyup(function(event)
if (event.altKey == false && event.ctrlKey == false)
if ((event.keyCode >= 48 && event.keyCode <= 57 && event.shiftKey== false) ||
(event.keyCode >= 65 && event.keyCode <= 90) ||
(event.keyCode >= 97 && event.keyCode <= 122))
alert("0-9, a-z or A-Z");
);
【讨论】:
我可以在 Safari 和 Firefox 的 OSX 上获得一个组合字符(例如由 alt-ee 构建的 é),这些字符似乎不会触发按键事件。 if(event.keyCode == 8) return true; 答案错过了。你应该测试重复“点”(。)你可以输入多个。【参考方案5】:<html>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
$(document).ready(function ()
$('.clsAlphaNoOnly').keypress(function (e) // Accept only alpha numerics, no special characters
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;
);
)
</script>
<body>
<input class='clsAlphaNoOnly' type='text'>
</body>
</html>
【讨论】:
【参考方案6】:我正在使用这个功能。
通过修改 RegExp,你可以去掉任何你个人不喜欢的字符。
$(function()
$("#user").bind('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;
);
);
【讨论】:
【参考方案7】:认为您必须编写一些 if 语句或类似的东西,获取键码并根据一些代表其他键码的数字对其进行验证:
例如:
if(keycode < 80)
return false;
【讨论】:
此代码将阻止您使用退格键。您需要处理控制字符并始终允许它们。 这只是示例。当然,您需要弄清楚您想要允许哪些代码(例如退格、箭头等)以及您想要忽略哪些代码。 这和 OSX 上的 321X 有同样的问题。以上是关于只允许英文字符和数字进行文本输入的主要内容,如果未能解决你的问题,请参考以下文章
Winforms 文本框允许用户只输入字母、数字、点和单词之间的空格。正则表达式