Javascript .replace()表达式未在computed observable中更新

Javascript .replace()表达式未在computed observable中更新,javascript,regex,knockout.js,Javascript,Regex,Knockout.js,我在knockoutJS中创建了一个计算的可观察对象,它支持用户输入并对输入执行文本操作 此可观察对象绑定到输入字段和标签。其目的是允许用户输入新名称,但我希望防止用户使用非字母数字字符。该函数在绑定和字符串求值中都起作用,但replace函数似乎没有更新。substring函数可以工作(将文本限制为255个字符),但我认为我在replace中没有完全正确地设置某些内容。Int eh current function,如果输入非法字符,用户将收到toastr警报,但replace函数不会将字符替

我在knockoutJS中创建了一个计算的可观察对象,它支持用户输入并对输入执行文本操作

此可观察对象绑定到输入字段和标签。其目的是允许用户输入新名称,但我希望防止用户使用非字母数字字符。该函数在绑定和字符串求值中都起作用,但replace函数似乎没有更新。substring函数可以工作(将文本限制为255个字符),但我认为我在replace中没有完全正确地设置某些内容。Int eh current function,如果输入非法字符,用户将收到toastr警报,但replace函数不会将字符替换为空白。如果有任何建议,我将不胜感激

html


我相信你的问题在于这一点:

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, ''));