1

我在这里有一个脚本:

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

4 回答 4

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');
于 2013-01-31T14:05:25.100 回答
2

而不是使用正则表达式来执行此操作,您最好只遍历一组坏词并使用 [indexOf] 查找字符串中的实例。(https://developer.mozilla.org/en-US/docs/JavaScript/参考/Global_Objects/String/indexOf )

否则你可以做一个正则表达式......

\badword1|badword2|badword3\ 

并检查任何匹配。

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

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

这将只匹配整个单词-即斯肯索普就可以了:)

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/

于 2013-01-31T14:02:37.700 回答
2

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

于 2013-01-31T14:03:05.350 回答
2

改变这个,这需要一个循环:

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

为了这:

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

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

此处为 RegEx 的PS 参考指南。但是关于某些功能什么是可能的,什么是不可能的,以及什么是好的代码,网上并没有很多明确的信息。我发现了几本最有用的书:David Flanagan 的最新JavaScript:权威指南和 Douglas Crockford 的JavaScript:最有用的 JavaScript 子集的优秀部分,包括 RegEx。Crockford 的铁路图特别好,但我不确定它们是否可以在任何地方在线获得。

编辑: 这是相关章节的在线副本,包括我提到的一些铁路图,以防万一。

于 2013-01-31T14:05:51.450 回答