Javascript .replace()表达式未在computed observable中更新
我在knockoutJS中创建了一个计算的可观察对象,它支持用户输入并对输入执行文本操作 此可观察对象绑定到输入字段和标签。其目的是允许用户输入新名称,但我希望防止用户使用非字母数字字符。该函数在绑定和字符串求值中都起作用,但replace函数似乎没有更新。substring函数可以工作(将文本限制为255个字符),但我认为我在replace中没有完全正确地设置某些内容。Int eh current function,如果输入非法字符,用户将收到toastr警报,但replace函数不会将字符替换为空白。如果有任何建议,我将不胜感激 htmlJavascript .replace()表达式未在computed observable中更新,javascript,regex,knockout.js,Javascript,Regex,Knockout.js,我在knockoutJS中创建了一个计算的可观察对象,它支持用户输入并对输入执行文本操作 此可观察对象绑定到输入字段和标签。其目的是允许用户输入新名称,但我希望防止用户使用非字母数字字符。该函数在绑定和字符串求值中都起作用,但replace函数似乎没有更新。substring函数可以工作(将文本限制为255个字符),但我认为我在replace中没有完全正确地设置某些内容。Int eh current function,如果输入非法字符,用户将收到toastr警报,但replace函数不会将字符替
我相信你的问题在于这一点:
return report.Name(insertedText.substring(0, 255)).replace(/[^a-zA-Z 0-9]+/g, '');
您将replace
方法链接到错误的对象(report.Name
而不是子字符串
)
只需将replace方法移到括号内,它就会按预期工作。您不需要将
链接到子字符串(0255)
括号,而不是report.Name()
还要注意,字符类中的空格与其他字符一样,所以空格不会被图案删除。@SmokeyHP这是好眼力!如果你将重新提交,作为一个答案与评论,我会标记为答案。Thanks@rlcrews很高兴知道!别担心。答复张贴
report.NameFormatted = ko.computed({
read: function () {
return report.Name().substring(0, 255);
},
write: function (value) {
var insertedText = value;
var Exp = /^[a-zA-Z0-9]*$/i;
if (!insertedText.match(Exp)) {
DisplayWarning('Attention', 'Non-alphanumeric may not be used.');
return report.Name(insertedText.substring(0, 255)).replace(/[^a-zA-Z 0-9]+/g, ''); ;
}
else {
DisplayWarning('Success', 'yeah');
return report.Name(insertedText.substring(0, 255));
}
},
owner: this
});
return report.Name(insertedText.substring(0, 255)).replace(/[^a-zA-Z 0-9]+/g, '');
return report.Name(insertedText.substring(0, 255).replace(/[^a-zA-Z 0-9]+/g, ''));