//需要過濾的字庫
let filterWordsArr = '廣告|下載|邀請|邀請碼';
//切割字庫成數(shù)組
filterWordsArr = filterWordsArr .slice(1, filterWordsArr.length - 1).split('|');
let filterWords = {};
//處理字符串愧膀,將字符串切割使用對象遞歸嵌套存儲
function dealWords(wordObj, insertString) {
if (insertString && insertString.length > 0) {
//獲取第一個字符
let firstWord = insertString[0].toLocaleLowerCase();
//獲取剩余字符
let remainStr = insertString.slice(1, insertString.length);
if (!wordObj[firstWord]) {
wordObj[firstWord] = {};
}
if (remainStr.length > 0) {
wordObj[firstWord] = dealWords(wordObj[firstWord], remainStr);
}
else {
wordObj[firstWord].isEnd = true;
}
return wordObj;
}
return wordObj;
}
filterWordsArr.forEach((e) => {
dealWords(filterWords, e);
});
/**
* 提取字符串里面符合規(guī)則的文字仇箱,并返回數(shù)組顷蟀,都不符合會返回空數(shù)組
*/
function checkStr(str) {
let result = [];
let stack = [];
let rule = filterWords;
//狀態(tài),true表面?zhèn)魅胱址弦?guī)則
for (let i = 0; i < str.length; i++) {
let ch = str.charAt(i).toLocaleLowerCase();
let item = rule[ch];
if (!item) {
i = i - stack.length;
stack = [];
rule = filterWords;
}
else if (item.isEnd) {
stack.push(ch);
result.push(stack.join(""));
stack = [];
rule = filterWords;
}
else {
stack.push(ch);
rule = item;
}
}
return result;
}
/**
*
* @param str //要替換的字符串
* @param replaceWords //替換成的字符
*/
function getReplaceWord(str, replaceWords) {
let replaceStr = '';
for (let i = 0; i < str.length; i++) {
replaceStr += replaceWords;
}
return replaceStr;
}
/**
* 將符合過濾規(guī)則的字符替換成*號
* @param str //傳入要過濾的字符串
* 如 filterStr('我的邀請碼') =》 返回 "我的**碼"
*/
function filterStr(str) {
str = str.toLocaleLowerCase();
let replaceWord = '*';
let filterWordList = checkStr(str);
if (filterWordList && filterWordList.length > 0) {
filterWordList.forEach(e => {
let replaceWords = getReplaceWord(e, replaceWord);
str = str.replace(e, replaceWords);
});
}
return str;
}
采用DFA算法實現(xiàn)字庫屏蔽規(guī)則
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門载佳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來炒事,“玉大人,你說我怎么就攤上這事蔫慧∧尤椋” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵姑躲,是天一觀的道長睡扬。 經(jīng)常有香客問我,道長黍析,這世上最難降的妖魔是什么卖怜? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮阐枣,結(jié)果婚禮上马靠,老公的妹妹穿的比我還像新娘。我一直安慰自己侮繁,他們只是感情好虑粥,可當(dāng)我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宪哩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪第晰。 梳的紋絲不亂的頭發(fā)上锁孟,一...
- 文/蒼蘭香墨 我猛地睜開眼腔稀,長吁一口氣:“原來是場噩夢啊……” “哼盆昙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起焊虏,我...
- 正文 年R本政府宣布贩汉,位于F島的核電站,受9級特大地震影響锚赤,放射性物質(zhì)發(fā)生泄漏匹舞。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一线脚、第九天 我趴在偏房一處隱蔽的房頂上張望赐稽。 院中可真熱鬧,春花似錦浑侥、人聲如沸姊舵。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽括丁。三九已至,卻和暖如春伶选,著一層夾襖步出監(jiān)牢的瞬間史飞,已是汗流浹背。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 環(huán)境 python版本:3.5 數(shù)據(jù)來源 數(shù)據(jù)來自51CTO網(wǎng)站的分享己单,點此下載 關(guān)聯(lián)規(guī)則 所謂關(guān)聯(lián)規(guī)則,就是指現(xiàn)...
- 簡言 用正則表達式做用戶密碼強度的通過性判定葵姥,過于簡單粗暴荷鼠,不但用戶體驗差,而且用戶帳號安全性也差榔幸。那么如何準(zhǔn)確評...
- SensitiveWords 基于DFA算法用golang實現(xiàn)了一個敏感詞允乐、違禁詞插件矮嫉,可以直接集成到項目...