3

我知道在处理正则表达式时最好使用白名单,但由于客户要求,我不能这样做。他们不希望我们阻止用户输入特殊字符 - 我们需要允许他们输入它们,然后在保存之前将它们删除。

所以说我有这样的事情:

$('#clickMe').click(function() {
    var test = $('#pizza').val();
    var pattern = /[a-z][0-9]/;
    if (!pattern.test(test)) {
        console.log("not pass: " + test);
    }
    else {
        console.log("passes");
    }
})

如何执行string.replace()并替换不在test模式中的任何字符?

ETA:这是一个小提琴;如果您Esther (test*&^) pizza在输入字段中输入类似的内容,我希望它返回Esther test pizza.

4

3 回答 3

2

像这样定义你的正则表达式:

var test = $('#pizza').val();
var pattern = /[^\w\s]+/g;
if (pattern.test(test)) {
    console.log("not pass: " + test);
    var cleanVal = test.replace(pattern, '');   
    // set cleanVal to wherever you want
    $('#pizza').val(cleanVal);
}
else {
    console.log("passes");
}
于 2013-08-02T17:19:47.513 回答
0

我认为正确的模式是/[a-z0-9]/,不是/[a-z][0-9]/

最好的解决方案是稍微改变一下表达式:

var cleanString = test.replace(/[^a-z0-9]/g,'');

如果你不能,那么你可以这样做:

var cleanString = test.match(/[a-z0-9]/g).join('');
于 2013-08-02T17:11:10.723 回答
0

如果您想删除不需要的字符

var test = test.replace(/[^a-z0-9]/gi, ""); //g means all, i means case insensitve
于 2013-08-02T17:13:57.513 回答