正则表达式没有检测字符串中的脏话?

时间:2013-01-31 13:53:55

标签: javascript regex

我这里有一个脚本:

http://jsfiddle.net/d2rcx/

它有一组badWords来比较输入字符串。

如果输入字符串与发誓字符串完全匹配,则此脚本可以正常工作,但如果字符串中有更多字符,则该脚本不会选择任何变体。发誓之前的空白。

使用此网站作为参考:http://www.zytrax.com/tech/web/regex.htm

它说以下正则表达式会检测字符串中的字符串。

var regex = new RegExp("/" + badWords[i] + "/g");
        if (fieldValue.match(regex) == true)
            return true;    

然而情况似乎并非如此。

我需要更改为正则表达式才能使其正常工作。

由于

此外,任何解释正则表达式的好链接都会比谷歌更好。

4 个答案:

答案 0 :(得分:3)

这是一个更正过的JSFiddle:

http://jsfiddle.net/d2rcx/5/

请参阅RegExp的以下文档:

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp

请注意,第二个参数是您应该指定标志的位置(例如'g'或'i')。例如:

new RegExp(badWords[i], 'gi');

答案 1 :(得分:2)

使用[indexOf]而不是使用Regex这样做你可能最好只是循环遍历一组坏词并在字符串中查找实例。(https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/indexOf

否则你可以制作像...这样的正则表达式。

\badword1|badword2|badword3\ 

并检查是否有任何匹配。

正则表达式中的单词边界是\b,所以你可以说

\\b(badword1|badword2|badword3)\b\

只匹配整个单词 - 即Scunthorpe会好的:)

var rx = new RegExp("\\b(donkey|twerp|idiot)\\b","i"); // i = case insenstive option

alert(rx.test('you are a twerp')); //true

alert(rx.test('hello idiotstick')); //fasle -not whole word

alert(rx.test('nice "donkey"')); //true

http://jsfiddle.net/F8svC/

答案 2 :(得分:2)

请查看http://www.w3schools.com/jsref/jsref_match.asp并注意fieldValue.match()不会返回布尔值,而是返回匹配数组

答案 3 :(得分:2)

更改此项,需要循环:

var regex = new RegExp("/" + badWords[i] + "/g");

为此:

var regex = new RegExp("/" + badWords.join("|") + "/g");

将是一个开始。这将一次完成所有匹配,因为该数组变为一个字符串,每个元素由管道分隔。

<强> P.S。 RegEx here参考指南。但是,网上没有很多关于某些功能有什么不可能的信息,也没有什么是好的代码。我发现了一些最有用的书:David Flanagan最新的 JavaScript:The Definitive Guide 和Douglas Crockford的 JavaScript:The Good Parts ,用于最有用的JavaScript子集,包括正则表达式。 Crockford的铁路图特别好,但我不确定它们是否可以在任何地方在线使用。

编辑: Here's相关章节的在线副本,包括我提到的一些铁路图,如果有帮助的话。