我这里有一个脚本:
它有一组badWords来比较输入字符串。
如果输入字符串与发誓字符串完全匹配,则此脚本可以正常工作,但如果字符串中有更多字符,则该脚本不会选择任何变体。发誓之前的空白。
使用此网站作为参考:http://www.zytrax.com/tech/web/regex.htm
它说以下正则表达式会检测字符串中的字符串。
var regex = new RegExp("/" + badWords[i] + "/g");
if (fieldValue.match(regex) == true)
return true;
然而情况似乎并非如此。
我需要更改为正则表达式才能使其正常工作。
由于
此外,任何解释正则表达式的好链接都会比谷歌更好。
答案 0 :(得分:3)
这是一个更正过的JSFiddle:
请参阅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
答案 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相关章节的在线副本,包括我提到的一些铁路图,如果有帮助的话。