Мне нужно регулярное выражение или функция в PHP, которая проведет проверку строки как хорошее имя XML-элемента.
Форма w3schools:
Элементы XML должны следовать этим наименованиям правила:
- Имена могут содержать буквы, цифры и другие символы
- Имена не могут начинаться с цифры или символа пунктуации
- Имена не могут начинаться с букв xml (или XML, или Xml и т.д.)
- Имена не могут содержать пробелы
Я могу написать основное регулярное выражение, которое будет проверять правила 1,2 и 4, но оно не будет учитывать все допустимые знаки препинания и не будет учитывать третье правило
\w[\w0-9-]
Дружественное обновление
Вот более авторитетный источник хорошо сформированных имен XML-элементов:
Имена и токены
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]
Name ::=
NameStartChar (NameChar)*
Также указывается отдельное не-токенированное правило:
Имена, начинающиеся со строки "xml" или с любой строкой, которая будет соответствовать (('X' | 'x') ('M' | 'm') ('L' | 'l')), являются зарезервированных для стандартизации в этой или будущих версиях этой спецификации.