実際には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]
ソース:拡張マークアップ言語(XML)1.0(第5版)2.3
HTMLの場合、以下が適用されます。
id =名前[CS]
この属性は要素に名前を割り当てます。この名前はドキュメント内で一意である必要があります。IDとNAMEのトークンは、で始まる必要があります。 手紙([A-Za-z])そして続くかもしれない 任意の数の文字、数字による ([0-9])、ハイフン( " - ")、アンダースコア ( "_")、コロン( ":")、およびピリオド ( "。")
W3Cの仕様基本的なHTMLデータ型と言う"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の制限は 他の関連するものと同様 文字列に対する制限 維持されます。単一の文字、 数値形式の例 文字参照、に対応する可能性があります 1つか2つの16ビット単位。
もちろん、これはおそらくあなたが望むものではない、そしてそのルートヴィヒWeinzierlの答えはあなたが探していたものである。ただし、すべてのDOMをHTMLまたはXHTMLとしてシリアル化できるわけではなく、DOMには独自の一連の規則があることを理解するのが賢明です。
HTML 4.0の仕様によると
IDおよびNAMEトークンは文字([A-Za-z])で始まり、その後に任意の数の文字、数字([0-9])、ハイフン( " - ")、アンダースコア( "_")を続けることができます。 、コロン( ":")、およびピリオド( "。")。
xhtmlとも呼ばれる有効なHTMLの目的のためには、Philippeが正しいです。 id属性にスペースや特殊文字(エスケープが必要なものは間違いありません)はありません。 52文字のアルファベット、大文字と小文字、数字0〜9、ハイフン( " - ")、アンダースコア( "_")、コロン( ":")、およびピリオド( "。")
/^[a-z]+[a-z0-9\-_:\.]*$/i
。 - Gajus[#xF900-#xFDCF]
正規表現では許可されていない、名前に使用できる有用なUnicode文字を表します。 - Phrogz