【发布时间】:2012-01-17 17:16:50
【问题描述】:
我在表单中有一个 HTML 字段,并且使用 JS 和 Regex,我必须限制用户可以在该字段中插入的字符。表单的用户只能插入以下字符( ) * + ^ / X x,以及数字和空格(当他数字或粘贴不同的字符时,不会写入任何内容)。这可能吗?我需要正则表达式,我终于知道如何使用 JS。
【问题讨论】:
标签: javascript html regex validation
我在表单中有一个 HTML 字段,并且使用 JS 和 Regex,我必须限制用户可以在该字段中插入的字符。表单的用户只能插入以下字符( ) * + ^ / X x,以及数字和空格(当他数字或粘贴不同的字符时,不会写入任何内容)。这可能吗?我需要正则表达式,我终于知道如何使用 JS。
【问题讨论】:
标签: javascript html regex validation
试试这个正则表达式
[^\(\)\*+\^/Xx0-9 ]
在这里,我们试图找到一个不包含任何允许字符的模式。如果你发现它,这意味着输入的字符是错误的。
【讨论】:
对此没有正确或错误的答案。
通常,使用特定条件的逻辑偏差进行检查的成本较低。
如果说whats allowed 听起来更好,那么使用允许的(正)字符类。
允许的类:[()*+^/Xx0-9 ],检查:<space>(-+/-9X\^x
不允许的类:[^()*+^/Xx0-9 ],检查:\0-\37!-',\-.:-W:-WY-\]_-wy-\377
从统计上讲,如果输入的 %99 数据是有效的,那么“允许”类在这方面的工作就会减少
不必检查每个字符或范围。
“不允许”类必须检查每个范围。
在这种特殊情况下,负类有更多的范围和字符要检查,它的边界
如果大部分数据无效,效率会更高,
【讨论】:
关于:
[^\(\)\*+\^/Xx0-9 ]
这些字符都不需要在集合中转义(但可以这样做)。
如果您想限制用户类型(这使用 jquery 方法):
$('#in1').keyup(function (evt) {
var content = $('#in1').val();
$('#in1').val(content.replace(/[^()*+^/Xx0-9]/g, ""));
return true;
});
其中 'in1' 是输入的 id。
【讨论】:
Paste 仅使用鼠标的输入。
onpaste 事件。取消事件(通过返回 false 或实际的“取消”API)可防止粘贴发生。我至少有一个案例,我使用以下所有事件作为验证输入的地方:onkeyup、onchange、onpaste、onblur、onselectionchange