RegEx 函数无法删除非法字符?

RegEx function failing to remove illegal chars?

据我所知,我的 RegEx 是正确的,替换方法应该是正确的。查看答案 here and here,我似乎使用了相同或非常相似的 RegEx 模式,并且它们是公认的答案。

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

理想情况下,RegEx 应该匹配字符 class 中包含的任何 ,意思是任何不是:a-z、0-9、'-'、' 。', 和 '_'。我读到不需要转义字符 classes 中的特殊字符(“[”、“]”和“-”除外),所以我只转义了连字符。

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

'_;<!--Invalid--!"s"' null' 应该 return ____--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;

抱歉 - 如果您也有问题,请永远不要忘记检查您的绝对基础知识(就像我一样)- 您使用的方法 return 是一个新对象,还是替换现有对象?

您只需要删除锚点:

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

编辑:

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

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

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

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