gpt4 book ai didi

javascript - 用于删除、箭头和转义键的正则表达式模式

转载 作者:数据小太阳 更新时间:2023-10-29 04:32:49 26 4
gpt4 key购买 nike

我正在编写一个 javascript 代码来限制可以输入文本框的键。

function keyRestricted(e) {
var keypressed;
var keychar;
var keycheck;
// IE - keyCode
// Netscape/Firefox/Opera - which
keypressed = e.keyCode || e.which;
keychar = String.fromCharCode(keypressed);
//alert(keychar);
keycheck = /[a-zA-Z0-9\b]/;
return keycheck.test(keychar);
} //keyrestricted

我的正则表达式现在是 /[a-zA-Z0-9\b]/,它允许字母数字和退格键。我想让删除键、左/右箭头和转义键在 Firefox (3.6) 中工作。

我不确定这些键的符号是什么。

在 ie8 中,即使\e 开关被排除在正则表达式之外,转义键(和 del/arrows)仍然处于事件状态,按下时,它会重置/清空文本框。

在 FF 中,我将转义放在表达式 /[a-zA-Z0-9\b\e]/ 中,但它似乎不适用于 firefox,即当按下退出键,它不会重置/清空文本框。

允许字母数字、L/R 箭头、删除、转义的正则表达式的有效符号是什么?

另外,这个 [a-zA-Z0-9\-\_] 的翻译是什么?它应该是字母数字和连字符。但是连字符前面的斜线是什么,因为连字符不需要斜线?由于下划线与表达式不匹配,\_ 的作用是什么?

TIA

编辑

使用 nnnnn 建议的键码数字对我(对其他人?)不起作用的原因是因为 65-90 的键码用于大写字母,尽管某些网站确实声称这些键码适用于小写字母和大写字母。

http://www.lookuptables.com/网站显示小写字母是从97-122。不幸的是,这个范围与一些字符有一些未映射的重叠。例如,\字符被列为具有 220 个键码。但是我的过滤器停用键码 > 122 仍然允许\通过。还有其他例子。

我已经使用笔记本电脑键盘和外部全尺寸键盘对此进行了测试。

编辑 2

我已将正则表达式和键码参数合并到一个函数中。该功能原则上有效,但由于疯狂的键码冲突,它不适用于 % 符号。它需要 onkeydown 和 onkeypress 来捕捉所有的键(% 键除外)。看我的讨论here javascript regex for key event input validations troubleshooting help

<head>
<script type="text/javascript">
function keyRestricted(evt) {
var theEvent = evt || window.event;
var key = theEvent.keyCode || theEvent.which;
var keychar = String.fromCharCode(key);
//alert(keychar);
var keycheck = /[a-zA-Z0-9]/;
// backspace || delete || escape || arrows
if (!(key == 8 || key == 27 || key == 46 || key == 37 || key == 39)) {
if (!keycheck.test(keychar)) {
theEvent.returnValue = false; //for IE
if (theEvent.preventDefault) theEvent.preventDefault(); //Firefox
}
}
}
</script>
</head>
<body>
Please modify the contents of the text field.
<input
type="text" value=""
onKeypress="return keyRestricted(event)"
onKeydown="return keyRestricted(event)"
/>
</body>

最佳答案

据我所知,Regex - 或者至少是 JavaScript 版本 - 不允许您测试某些“特殊”字符,例如转义符和箭头键(尽管我相信您可以测试退格键)。

我更喜欢用标准的 if 语句来实现这种事情:

var keypressed = e.which || e.keyCode;

if ((keypressed >=65 && keypressed <= 90) // letters
|| (keypressed >=48 && keypressed <= 57) // digits
|| keypressed === 8 // backspace
|| keypressed === 27 // escape
|| keypressed === 46 // delete
|| (keypressed >= 35 && keypressed <= 40) // end, home, arrows
// TODO: shift, ctrl, alt, caps-lock, etc
) {
// do something
}

// If the keys you care about don't follow any particular pattern
// a switch might be more convenient:
switch (keypressed) {
case 8:
case 27:
case 46:
// valid key, do something
break;
default:
// invalid key, do something else
break;
}


// You can also do something like this:
var permittedKeyCodes = {
"8" : true, // backspace
"27" : true, // escape
"46" : true // delete
};
if (permittedKeyCodes[keypressed]) {
// do something
}

如果您使用后一种方法,那么在函数外部定义 permittedKeyCodes 对象会更有效。

您可以在多个位置 ( here's one ) 获取所有键码的列表。

请注意,如果您捕获 keydown 或 keyup 事件,则返回的键码与键相关联,而不是与字符相关联,因此,例如,大写字母 A 和小写字母 A 都具有相同的代码。按键事件的工作方式不同。

关于javascript - 用于删除、箭头和转义键的正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7226402/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com