这是一个简单的代码,如果它在正则表达式中存在,则测试输入值。主要问题是它始终返回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!");
}
});
答案 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();
如另一个答案所述,但这是多余的。
注意:为了您自己,请避免使用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属性。