2011-01-09 95 views
3

我想用jQuery来验证表单。JQuery - 删除不匹配的字符regEx

这是在用户的文本框中允许的模式。

var pattern = /^[a-zA-Z0-9!#$&%*+,-./: ;[email protected]_]/g; 

如果用户键入除此以外的任何内容,则必须用“”替换。

$(document).ready(function() { 
    $('#iBox').blur(function() { 
    var jVal = $('#iBox').val(); 
    if(jVal.match(pattern)) { 
    alert("Valid"); 
    } else { 
    alert("New "+jVal.replace(!(pattern),"")); 
       } 
    }); 
    }); 
}); 

但是替换函数不能这样工作。

回答

5

使用negated character class通过后立即写^开幕括号:

/[^a-zA-Z0-9!#$&%*+,-./: ;[email protected]_]/g 

这里^有着特殊的含义,因此正常的不同意味着它在正则表达式(通常它匹配该行的开始)。

所以,你的更正后的代码应该是这样的:

var pattern = /[^a-zA-Z0-9!#$&%*+,-./: ;[email protected]_]/g; 
// ... 
alert("New " + jVal.replace(pattern, "")); 

还要注意,调用replace实际上并没有改变原来的字符串 - 它返回字符串的修改后的副本。如果要修改jVal的价值,你就需要重新分配给它:

jVal = jVal.replace(pattern, ""); 
+0

只是要清楚的提问者,你应该这样做,则只需拨打'取代(的模式,“”)` - 的问题当然是通过布尔否定模式,它本质上是通过`false`来代替RegExp。 – 2011-01-09 21:53:41