javascript替換字符

作者: 司徒正美  來源: 博客園  發布時間: 2009-10-12 10:49  閱讀: 1131 次  推薦: 0   原文鏈接   [收藏]  

  不用多言,這種技術被廣泛應用于表單驗證,語法高亮和危險字符過濾中。一段話如果很長,如果不想像下面那樣替換,我們得想些辦法了。

str = str.
    replace( /&(?!#?\w+;)/g , '&').
    replace( /"([^"]*)"/g   , '“$1”'   ).
    replace( //g           , '>' ).
    replace( //g           , '' ).
    replace( //g           , ''  ).
    replace( //g           , ''  ).
    replace( //g           , ''  ).
    replace( //g           , ''  ).
    replace( //g           , '' ).
    replace( //g           , ''  );

  上面這個還算短了,我看過一些論壇的JS代碼,在把Wind Code轉換成HTML時,那真是瘋子似的寫上二三十行。其實我們大可以把這些匹配模式與替換后的字符放到一個哈希中,然后一口氣替換掉。

var hash = {
    '<' : '<' ,
    '>' : '>',
    '' : '',
    '' : '' ,
    '' : '' ,
    '' : '' ,
    '' : '' ,
    '' : '',
    '' : ''
};
str = str.
	replace( /&(?!#?\w+;)/g , '&' ).
	replace( /"([^"]*)"/g   , '“$1”'  ).
	replace( /[<>…“”‘’—–]/g , function ( $0 ) {
		return hash[ $0 ];
	});

  但這個缺陷也很明顯,如哈希的鍵必須是簡單的普通字符串,不能是復雜正則,這就是我們不得不分開的原因。replace在老一點的瀏覽器是不支持function的。為此,我們只好放棄上面最后那個replace方式,替換方統一為普通字符串。

String.prototype.multiReplace = function ( hash ) {
    var str = this, key;
    for ( key in hash ) {
        if ( Object.prototype.hasOwnProperty.call( hash, key ) ) {
            str = str.replace( new RegExp( key, 'g' ), hash[ key ] );
        }
    }
    return str;
};

Object.prototype.hasOwnProperty.call( hash, key )是用來過濾繼承自原型的方法與屬性的。
這樣一來,使用就簡單了:

str = str.multiReplace({
    '&(?!#?\\w+;)' :'&',
    '"([^"]*)" : '“$1',
    '<' : '<' ,
    '>' : '>',
    '' : '',
    '' : '' ,
    '' : '' ,
    '' : '' ,
    '' : '' ,
    '' : '',
    '' : ''
});
0
0
 
標簽:JavaScript
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()