Javascript正则表达式从DOM ID中删除非法字符

11 javascript regex

我在网页上动态创建了许多DOM元素.它们的ID是从外部列表生成的,有时这些名称可能包含非法字符,例如"@"或"&".

我需要删除与以下规则不匹配的字符:

  • 该字符串必须以字母开头
  • 第一个字符后面可以跟任意数量的字母,数字([0-9]),连字符(" - "),下划线("_"),冒号(":")和句点(".")

所以,如果原始字符串是:

99%的人不是1%

然后删除非法字符的结果字符串将是:

ofPeoplearenotthe1

任何人都可以帮助我在Javascript中编写正则表达式,从字符串中删除不符合上述要求的字符吗?

Qta*_*tax 28

var str = "99% of People are not the 1%";
str = str.replace(/^[^a-z]+|[^\w:.-]+/gi, "");
Run Code Online (Sandbox Code Playgroud)

  • 请注意,ID也必须是唯一的.如果要删除非法字符以符合标准,则还需要维护"已使用"ID列表,以避免冲突. (5认同)
  • @ umair.ali,它几乎是一样的,可以这样引用:`@"(?i:^ [^ az] + | [^\w:.-] +)"` (3认同)
  • 这似乎不会从 ID 中删除句点?不确定这是否根据 HTML 规范无效;但是它确实阻止了 JQuery 使用 ID 选择器访问元素。我最终使用了这个 `str.replace(/^[^az]+|[^\w]+/gi, "")` (2认同)
  • 接受的答案在不需要时使用i标志,并且可能不必要地增加正则表达式运行时间.一个更具体(也就是更有效)的正则表达式是:`str = str.replace(/ ^ [^ a-zA-Z] + | [^\w:.-] +/g,"");` (2认同)