2

私は自分の ajax チャット システム用の小さなヘルパー クラスを作成しようとしています。必要な基本機能を追加しようとしています。

var strings = {
        filterWords: ["fool", "dumb", "arse"],
        removeSpecialChars: function (str) {
            return str.replace(/[^\w\s]/gi, '');
        },
        killSpace: function (str) {
            return str.replace(/\s/g, '');
        },
        reduceSpace: function (str) {
            return str.replace(/\s+/g, ' ');
        },
        allowLetsAndNums: function (str) {
            return str.replace(/[^A-Za-z0-9]/g, ' ');
        },
        allowLets: function (str) {
            return str.replace(/[^A-Za-z]/g, ' ');
        },
        allowNums: function (str) {
            return str.replace(/[^0-9]/g, ' ');
        },
        wordFilter: function (str) {
            var rgx = new RegExp(this.filterWords.join("|"), "gi");
            return str.replace(rgx, "****");
        }
    }

私が見つけたのは、複数のメソッドを一緒に実行する必要があるかもしれないということです。以下の結果にならずにこれを行うベストプラクティスは何ですか?

alert(strings.wordFilter(strings.reduceSpace(strings.allowLets("efgwge @£235%^@£ fool you a dumb arse432345$%^"))));

ありがとう

4

4 に答える 4

3

これを流暢なインターフェースにして、次のようなコードを許可することができます。

var x = new Validation("efgwge @£235%^@£ fool you a dumb arse432345$%^");
alert(x.allowLets().reduceSpace().wordFilter().result());
// alerts "efgwge **** you a **** ****"

メインコードは次のようにする必要があります。

var Validation = function(str) {
    this.str = str;
    filterWords = ["fool", "dumb", "arse"]
    this.removeSpecialChars = function () {
        this.str = this.str.replace(/[^\w\s]/gi, '');
        return this;
    };    
    this.killSpace = function () {
        this.str = this.str.replace(/\s/g, '');
        return this;
    };
    this.reduceSpace = function () {
        this.str = this.str.replace(/\s+/g, ' ');
        return this;
    };
    this.allowLetsAndNums = function () {
        this.str = this.str.replace(/[^A-Za-z0-9]/g, ' ');
        return this;
    };
    this.allowLets = function () {
        this.str = this.str.replace(/[^A-Za-z]/g, ' ');
        return this;
    };
    this.allowNums = function () {
        this.str = this.str.replace(/[^0-9]/g, ' ');
        return this;
    };
    this.wordFilter = function () {
        var rgx = new RegExp(filterWords.join("|"), "gi");
        this.str = this.str.replace(rgx, "****");
        return this;
    };
    this.result = function(){
        return this.str;
    };
}

実例: http: //jsfiddle.net/fb7en/

于 2012-11-07T10:39:22.287 に答える
1

String プロトタイプを拡張できます。

String.prototype.removeSpecialChars = function () {
return this.replace(/[^\w\s]/gi, '');
}
String.prototype.killSpace = function () {
return this.replace(/\s/g, '');
}

var foo = "This is my§$% String";
​document.write​(foo.removeSpecialChars​().killSpace());​
于 2012-11-07T10:34:53.407 に答える
1

関数を String.prototype に追加して、次のように関数を呼び出すことができます。

String.prototype.killSpace = function() {
  return this.replace(/\s/g, '');
}
String.prototype.reduceSpace = function () {
  return this.replace(/\s+/g, ' ');
}

"foo   bar".reduceSpace().killSpace(); // => returns foobar

これの唯一の欠点は、for..in ループを使用して文字列を反復処理できないことです。これは、メソッドをメンバーとしてリストし、現在、反復不可能にするためのクロスブラウザーの方法がないためです (IE はそうではありません)。サポートします)。

于 2012-11-07T10:39:57.337 に答える
0

You might consider a chainable API for your Object:

var StringFilter = {
    _string: '',
    string: function (string) {
        this._string = string || '';
        return this;
    },
    filterWords: ["fool", "dumb", "arse"],
    removeSpecialChars: function () {
        this._string = this._string.replace(/[^\w\s]/gi, '');
        return this;
    },
    killSpace: function () {
        this._string = this._string.replace(/\s/g, '');
        return this;
    },
    reduceSpace: function () {
        this._string = this._string.replace(/\s+/g, ' ');
        return this;
    },
    allowLetsAndNums: function () {
        this._string = this._string.replace(/[^A-Za-z0-9]/g, ' ');
        return this;
    },
    allowLets: function () {
        this._string = this._string.replace(/[^A-Za-z]/g, ' ');
        return this;
    },
    allowNums: function () {
        this._string = this._string.replace(/[^0-9]/g, ' ');
        return this;
    },
    wordFilter: function () {
        var rgx = new RegExp(this.filterWords.join("|"), "gi");
        this._string = this._string.replace(rgx, "****");
        return this;
    },
    select: function () {
        return this._string;
    }
};

StringFilter
    .string("efgwge @£235%^@£ fool you a dumb arse432345$%^")
    .allowLets()
    .reduceSpace()
    .wordFilter()
    .select();
于 2012-11-07T10:46:00.347 に答える