at符号(@)是有效的HTML/XML标记字符吗?

at符号(@)是有效的HTML/XML标记字符吗?,html,xml,tags,character,specifications,Html,Xml,Tags,Character,Specifications,我正在使用正则表达式进行一些HTML剥离(是的,我知道,我从不使用正则表达式解析HTML,但我只是剥离它,不幸的是,我也不能使用任何外部库)。我正在使用正则表达式手册中的正则表达式,它工作得很好,只是我遇到了这个问题: 在字符串Bob Saget中,我的正则表达式将电子邮件作为标记进行匹配 所以我的问题是,@符号是有效的XML还是HTML标记字符?(我不是问它在属性中是否有效;我知道它是有效的)如果不是,我将能够成功地在正则表达式中排除它 我不知道在哪里可以找到这个。我看了一下,我认为在XML中

我正在使用正则表达式进行一些HTML剥离(是的,我知道,我从不使用正则表达式解析HTML,但我只是剥离它,不幸的是,我也不能使用任何外部库)。我正在使用正则表达式手册中的正则表达式,它工作得很好,只是我遇到了这个问题:

在字符串
Bob Saget
中,我的正则表达式将电子邮件作为标记进行匹配

所以我的问题是,
@
符号是有效的XML还是HTML标记字符?(我不是问它在属性中是否有效;我知道它是有效的)如果不是,我将能够成功地在正则表达式中排除它

我不知道在哪里可以找到这个。我看了一下,我认为在XML中,标记中不允许使用at符号;不过,我希望能有一些具体的证据。

再看一下:

标签包括:

'<' Name (S Attribute)* S? '>'
NameStartChar (NameChar)*
":" | [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]
NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
NameStartChar由以下部分组成:

'<' Name (S Attribute)* S? '>'
NameStartChar (NameChar)*
":" | [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]
NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
NameChar由以下部分组成:

'<' Name (S Attribute)* S? '>'
NameStartChar (NameChar)*
":" | [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]
NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
@
符号为
U+0040


因此,
@
符号在NameChar或NameStartChar中无效,因此在名称中无效。

问题在于你的裸角括号,应该通过实体或字符引用给出。“@”在任何类型的HTML中都是完全有效的字符。@Kerrek当然,
@
符号是有效字符。但是它在标签中有效吗?如果我给HTML或XML解析器一个带有at符号的标记,它会解析它吗?所谓“有效标记”是指“有效元素类型名称”吗?对于有效字符列表,答案是“否”。元素类型名称必须是
名称
。Quote:“名称[…]中不包括ASCII符号和标点符号以及相当大的一组Unicode符号字符。”。。。啊,你已经发现了。@NickAldwin-name字符规范是一种形式语法。任何未明确包含的内容都被排除在外。您的编辑应该移动到一个答案。firefox似乎支持它,但只有少数人创建自定义元素,我认为他们永远不会在标记名中使用@。不要剥去它们,并对它们进行编码,&不清楚这是否适用于HTML,您最初的问题集中在HTML上。WhatWG HTML规范只允许
[a-zA-Z]
作为有效的
NameStartChar
。对于
NameChar
,它允许
[^\s\0>/]