6

%我允许数字、字母和特殊字符_在我的 html 文本框中除外。我有模式/[a-zA-Z0-9!@#$^&*()-+=]/。我认为这不是最好的方法,因为我必须列出除了提到的两个之外的所有特殊字符。有没有一种方法可以让我不必列出所有特殊字符并且不包括提到的两个?顺便说一句,我使用 javascript 正则表达式。

有关演示,请参阅http://jsfiddle.net/ce8Th/

请帮忙。

4

4 回答 4

3

不需要那个复杂的循环。只需replace直接调用整个字符串:

$(this).val(function (i, v) {
    return v.replace(/%|_/g, '');
});

这是你的小提琴:http: //jsfiddle.net/ce8Th/1/

于 2013-01-14T01:58:47.733 回答
2

你可以反过来做:

/[%_]/

if (pattern.test( ....

如果您不需要,不使用正则表达式也很好,并不是说在这种情况下它有很大的不同:

if ("%_".split().indexOf(text.charAt(i)) > -1) {
于 2013-01-14T02:00:02.290 回答
2

白名单总是最好的。除了添加长度修饰符以及开始和结束字符之外,我建议保留您所拥有的内容:

/^[a-zA-Z0-9!@#$^&*()-+=]+$/
于 2013-01-14T02:02:30.553 回答
1

我是否会碰巧猜测您正在将此用户输入用于涉及LIKE搜索部分匹配的 MySQL 查询?

如果是这样,请不要排除字符。相反,在服务器端转义它们。例如:

$output = str_replace(Array("%","_"),Array("\\%","\\_"),$input);
于 2013-01-14T02:02:44.007 回答