从DOM ID中删除非法字符的Javascript正则表达式
Javascript regex to remove illegal characters from DOM ID
我在网页上动态创建了许多DOM元素。它们的ID是从外部列表中生成的,有时这些名称可能包含ID的非法字符,如"@"或"&"。
我需要删除不符合以下规则的chracter:
- 字符串必须以字母开头
- 第一个字符后面可以跟任意数量的字母、数字([0-9])、连字符("-")、下划线("_")、冒号(":")和句点(".")
因此,如果原始字符串是:
99%的人不是1%的
然后,删除了非法字符的字符串将是:
不是的人
有人能帮我用Javascript编写正则表达式吗?它会从字符串中删除不符合上述要求的字符?
var str = "99% of People are not the 1%";
str = str.replace(/^[^a-z]+|[^'w:.-]+/gi, "");
HTML5规范已经更新,并根据https://html.spec.whatwg.org/multipage/dom.html#global-属性id
属性现在可以包含其值的任何字符,空白除外。
在HTML元素上指定时,id属性值必须是唯一的在元素树中的所有ID中,并且必须至少包含一个字符。该值不得包含任何ASCII空白。
我不确定在哪一点上元素可以被分配两个id
属性,也不确定它的逻辑客观推理(可能是当时不太成熟的理解),尽管这已经从标准中被否决了,但这已经是web开发社区多年来的常识了。
如果您想要能够抵抗冲突的东西,请尝试使用btoa转换为base64;
var badId1 = "99% of the 1%";
var badId2 = "999% of the 1%";
var validId1 = "ID_OTklIG9mIHRoZSAxJQ";
var validId2 = "ID_OTk5JSBvZiB0aGUgMS";
var makeId = function(text) { return "ID_" + btoa(text).slice(0,-2); };
expect(makeId(badId1)).toEqual(validId1);
expect(makeId(badId2)).toEqual(validId2);
请注意这两个IDS是如何生成不同的键的,而regex trim则不会。
var id = "99% of People are not the 1%";
id = id.replace(/[^a-z0-9'-_:'.]|^[^a-z]+/gi, "");
演示:http://jsfiddle.net/jfriend00/qqjh6/
这个想法是替换开头的一个或多个非字母字符,然后替换字符串其余部分的所有其他非法字符。
有人可能会问,即使拥有一个事先不知道的、基于内容动态生成的id,又有什么意义。如果它基于一些可以更改的内容,那么在CSS中就不能很好地使用它。
如果有人在Java中需要这个:
if(! htmlId.matches("^[A-Za-z0-9]+[''w''-'':''.]*$")){
LOG.warn("html id "+htmlId+" is not valid, have to remove all invalid chars");
htmlId = htmlId.replaceAll("[^^A-Za-z0-9''w''-'':''.]+", "");
}
在我的情况下,我检查了字符串,并用空白替换了所有无效的字符串。感谢Qtax。
正如John所提到的,HTML5规范允许ID中除了空白之外的所有字符。
这意味着以下RegEx(在JavaScript中)将足以遵循HTML5规范:
let str = "99% of People are not the 1%";
str = str.replace(/'s+/g, "");
// "99%ofPeoplearenotthe1%"
- 使用JSON.parse时出现无效字符javascript错误
- 使用特殊字符 Javascript 对 URL 进行编码
- 如何替换不可打印的unicode字符(Javascript)
- 正则表达式密码允许特殊字符 JavaScript
- 正则表达式不允许特殊字符(Javascript)
- 如何删除字段中的字符 javascript
- 自动删除新字符 JavaScript
- 按下退格键时删除一组字符(Javascript)
- 获取某些字符 JavaScript 的所有可能组合
- 如何获取有关输入名称长度的字符 - javascript 的警报
- 当前字符JavaScript的RegExp
- 不允许使用除允许使用的字符javascript regex之外的特殊字符
- Regex,只允许一组特定的字符(Javascript)
- 缺少空白后的字符-javascript
- 输入只允许英文和非英文字符javascript
- 如何检查字符串是否有起始字符是特殊字符:javascript
- 正则表达式(regex): /W带连字符(javascript)
- 测试特殊字符JavaScript
- 密码-大写字符JavaScript
- 如何提取类型数字的最后字符javascript/jquery