RegEx功能无法删除非法字符?

时间:2015-11-12 14:10:00

标签: javascript regex nightwatch.js

据我所知,我的RegEx是正确的,替换方法应该是这样做的。查看答案herehere,似乎我使用相同或非常相似的RegEx模式,并且它们是可接受的答案。

所以我想也许我对.replace方法做错了什么?

理想情况下,RegEx应该匹配字符类中包含的任何 not ,这意味着任何不是:az,0-9,' - ',' 。'和' _'。我读到没有必要在角色类中逃避特殊字符(除了' [',']'和' - ')所以我有只是逃脱了连字符。

非常感谢任何帮助。澄清;传递以下函数这个字符串:

'_;<!--Invalid--!"s"' null'应该返回 ____--invalid--____null

function nameSafe(name) {
  var rgxIllegalChars = /^[^a-z0-9\-._]+$/;
  name = name.toLowerCase();
  return name.replace(rgxIllegalChars, '_');
}

编辑:已解决,请参阅已接受的答案以获取相关信息。完成功能:

function nameSafe(name) {
  var rgxIllegalChars = /[^a-z0-9\-._]+/gi;
  return name.replace(rgxIllegalChars, '_');
}

我在我的函数中添加了一些调试输出以尝试捕获之前和之后,并且有点愚蠢地忘记了.replace实际上并没有替换原始字符串。所以我这样做:

console.log(name);
name.replace(rgxIllegalChars, '_');
console.log(name);
return name;

道歉 - 如果您遇到麻烦,请不要忘记检查您的绝对基础知识(就像我一样) - 您使用的方法是返回新对象还是替换现有对象?

2 个答案:

答案 0 :(得分:2)

您只需要移除锚点:

function nameSafe(name) {
  var rgxIllegalChars = /[^a-z0-9\-._]+/;
  name = name.toLowerCase();
  return name.replace(rgxIllegalChars, '_');
}

编辑:

&#13;
&#13;
var name = "'_;<!--Invalid--!\"s\"' null'";
var rgxIllegalChars = /[^a-z0-9\-._]+/g;
name = name.toLowerCase();
alert(name.replace(rgxIllegalChars, '_'));
&#13;
&#13;
&#13;

请注意此行var rgxIllegalChars = /[^a-z0-9\-._]+/g;

答案 1 :(得分:2)

在正则表达式^中表示assert position at start of the string$表示assert position at end of the string一旦删除这两项,它就会为您提供预期结果。

我已经为你https://regex101.com/r/xF7vA8/3在Regex101.com上创建了一个示例,点击Substitution按钮查看结果。

enter image description here