jQuery .test使用正则表达式返回false

时间:2014-07-10 03:36:49

标签: javascript jquery regex

这是一个简单的代码,如果它在正则表达式中存在,则测试输入值。主要问题是它始终返回false,尽管输入的值应该使用正则表达式返回true。

HTML

<input id="user" type="text" />

的jQuery

$("#user").on("input propertychange",function(){

    var user = $(this).val();
    var pattern = /[^a-zA-Z 0-9 . -]/g;
    var clean_user = user.replace(/[^a-zA-Z 0-9 . -]+/g, '');

    // Filter text box
    $("#user").val(clean_user);
    var fresh_user_value = $("#user").val(clean_user);

    if(pattern.test(fresh_user_value) == true){
        alert("Working!");
    }
});

4 个答案:

答案 0 :(得分:1)

更改:

if(pattern.test(fresh_user_value) === true)

要:

if(pattern.test(clean_user))

当您声明fresh_user_value时,请执行以下操作:

var fresh_user_value = $("#user").val(clean_user);

从那里返回的值不是字符串,而是jQuery对象。

你也可以这样做:

var fresh_user_value = $("#user").val();

如另一个答案所述,但这是多余的。

FIDDLE

jQuery docs for .val()

注意:为了您自己,请避免使用alert来处理此类事情(或任何类型的事情)。

答案 1 :(得分:1)

你可以像这样申请替换:

$(this).val(function(_, value) {
    return value.replace(/[^a-zA-Z 0-9 . -]+/g, '');
});

由于您使用相同的表达式进行测试和替换,因此从字符串中删除匹配字符后,它将通过测试,这是合乎逻辑的。

答案 2 :(得分:0)

您正在设置而不是在此处获取值:

var fresh_user_value = $("#user").val(clean_user);

更改为:

var fresh_user_value = $("#user").val();

答案 3 :(得分:0)

注意:flags参数在v8 Core(Chrome和NodeJs)中不起作用。一个字符串,指定正则表达式标志的组合。 String.replace方法中flags参数的使用是非标准的。不使用此参数,而是使用带有相应标志的RegExp对象。如果使用此参数的值应该是由一个或多个以下字符组成的字符串,以影响操作描述

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

user.replace(/[^a-zA-Z 0-9 . -]+/g, '');

如果您使用的是chrome,则标记(g)将无效。

你的另一个问题是这时的逻辑:

$("#user").val(clean_user);
var fresh_user_value = $("#user").val(clean_user);

fresh_user_value中,要获取#user元素的值,您需要做的就是:

$("#user").val();

如果您只需要当前值,则无需将参数传递给val()。传递参数将改变元素的value属性。

相关问题