【发布时间】:2010-11-07 19:18:56
【问题描述】:
【问题讨论】:
【问题讨论】:
其实 HTML 和 XHTML 是有区别的。 由于 XHTML 是 XML,因此适用于 XML ID 的规则:
ID 类型的值必须与名称产生式匹配。
NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
来源:Extensible Markup Language (XML) 1.0 (Fifth Edition) 2.3
对于 HTML,以下适用:
id = 名称 [CS]
此属性为元素分配名称。此名称在文档中必须是唯一的。ID 和 NAME 令牌必须以 字母 ([A-Za-z]) 并且可以跟随 由任意数量的字母、数字 ([0-9])、连字符 ("-")、下划线 ("_")、冒号 (":") 和句点 (".")。
【讨论】:
/^[a-z]+[a-z0-9\-_:\.]*$/i。
[#xF900-#xFDCF] 这样的“gobbeldygook”字符范围表示名称中允许的有用 Unicode 字符,而您的正则表达式不允许。
W3C 规范 Basic HTML data types 说 “ID 和 NAME 令牌必须以字母 ([A-Za-z]) 开头,后面可以跟任意数量的字母、数字 ([0-9]) 、连字符 ("-")、下划线 ("_")、冒号 (":") 和句点 (".")。"
【讨论】:
如果我们从字面上理解您问题的标题,那么 HTML 和 XHTML 规则都不适用。相反,相关规范是 DOM 规范。
以 DOM Level 3 为源,假设“DOM ID”是指设置了“ID”标志的属性,则值为“DOMString”,其字符可以是任何 UTF-16可编码字符。
16 位单位
DOMString 的基本单位。这表明对 DOMString 的索引 以 16 位为单位发生。这必须 不要被误解为 DOMString 可以存储任意 16 位 单位。 DOMString 是一个字符 以 UTF-16 编码的字符串;这意味着 UTF-16 的限制为 以及其他相关的 对字符串的限制必须 得到维护。单个字符,对于 数字形式的示例 字符参考,可能对应于 一个或两个 16 位单元。
当然,这可能不是您想要的,而 Ludwig Weinzierl 的答案正是您想要的。然而,明智的做法是了解并非所有 DOM 都可以序列化为 HTML 或 XHTML,并且 DOM 有自己的一套规则。
【讨论】:
根据 HTML 4.0 规范
ID 和 NAME 标记必须以字母 ([A-Za-z]) 开头,后跟任意数量的字母、数字 ([0-9])、连字符 ("-")、下划线 (" _")、冒号 (":") 和句点 (".")。
【讨论】:
为了有效的 html aka xhtml,Philippe 是正确的。 id 属性没有空格或特殊字符(当然不需要转义)。只有 52 个字符的字母表、大小写、数字 0-9、连字符 ("-")、下划线 ("_")、冒号 (":") 和句点 (".")
【讨论】: